WeStudio技术社区

 找回密码
 立即注册

快捷登录

QQ登录

只需一步,快速开始

查看: 3199|回复: 1

字符串和数字之间的转换

[复制链接]

88

主题

123

帖子

918

积分

版主

Rank: 7Rank: 7Rank: 7

积分
918
发表于 2019-10-10 12:54:08 | 显示全部楼层 |阅读模式
本帖最后由 hixon 于 2020-8-11 18:09 编辑

  • 数组转换成字符串
如 var data = [0x61, 0x62, 0x63, 0x64]; 转换成字符串 'abcd'
ui.main.label.text = util.arrayToUtf8(data); // 使用util.arrayToUtf8方法

  • 数字转换为16进制字符
如 var data = [0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff];将第2个元素0xcc显示成16进制字符'cc'到标签
ui.main.label.text = data[2].toString(16);  // 使用JS方法 number.toString(radix)

  • 数组转换为空格分隔的16进制字符串
如 var data = [0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff];将整个数组显示成16进制到标签
ui.main.label.text = util.arrayToHexString(data);  // 使用util方法 util.arrayToHexString(array_name)

  • 数组转换为浮点数
如 var data = [0x40, 0x48, 0xf5, 0xc3];将4个字节的数组转换成大端模式的浮点数 3.140000104904175
ui.main.label.text = util.arrayToFloat(data);  // 使用util方法 util.arrayToFloat(array_name)

如 var data = [0xc3, 0xf5, 0x48, 0x40];将4个字节的数组转换成小端模式的浮点数 3.140000104904175
ui.main.label.text = util.arrayToFloat(data, false);  // 使用util方法 util.arrayToFloat(array_name, isBigEndian)

  • 浮点数只显示N位小数
如 var value = 3.1415926; 只保留两位小数显示
ui.main.label.text = value.toFixed(2); // 使用JS方法 number.toFixed(num)

  • 浮点数转换成整数
如 var value = 3.1415926; 转换成整数 3
ui.main.label.text = parseInt(value);

回复

使用道具 举报

88

主题

123

帖子

918

积分

版主

Rank: 7Rank: 7Rank: 7

积分
918
 楼主| 发表于 2020-7-8 13:19:14 | 显示全部楼层
本帖最后由 hixon 于 2020-7-8 13:21 编辑

关于字节数组转换成浮点数,建议使用util.arrayToFloat(data)方法(效率更高),但是我们也能直接通过JS语法来实现,如:
  1. function Bytes2Float32(byteArray) {
  2.     var bytes = 0;
  3.     for (var i=0; i<byteArray.length; i++) {
  4.         bytes |= ((byteArray[i] & 0xFF) << 8 * (byteArray.length - 1 - i));
  5.     }
  6.     var sign = (bytes & 0x80000000) ? -1 : 1;
  7.     var exponent = ((bytes >> 23) & 0xFF) - 127;
  8.     var significand = (bytes & ~(-1 << 23));

  9.     if (exponent == 128)
  10.         return sign * ((significand) ? Number.NaN : Number.POSITIVE_INFINITY);

  11.     if (exponent == -127) {
  12.         if (significand == 0) return sign * 0.0;
  13.         exponent = -126;
  14.         significand /= (1 << 22);
  15.     } else significand = (significand | (1 << 23)) / (1 << 23);

  16.     return sign * significand * Math.pow(2, exponent);
  17. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|物一世(北京)科技有限公司 ( 京ICP备20025895 )

GMT+8, 2022-8-19 18:41 , Processed in 0.050988 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表