hixon 发表于 2019-10-10 12:54:08

字符串和数字之间的转换

本帖最后由 hixon 于 2020-8-11 18:09 编辑


[*]数组转换成字符串
如 var data = ; 转换成字符串 'abcd'ui.main.label.text = util.arrayToUtf8(data); // 使用util.arrayToUtf8方法

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

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

[*]数组转换为浮点数
如 var data = ;将4个字节的数组转换成大端模式的浮点数 3.140000104904175ui.main.label.text = util.arrayToFloat(data);// 使用util方法 util.arrayToFloat(array_name)
如 var data = ;将4个字节的数组转换成小端模式的浮点数 3.140000104904175ui.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; 转换成整数 3ui.main.label.text = parseInt(value);

hixon 发表于 2020-7-8 13:19:14

本帖最后由 hixon 于 2020-7-8 13:21 编辑

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

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

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

    return sign * significand * Math.pow(2, exponent);
}
页: [1]
查看完整版本: 字符串和数字之间的转换