【问题标题】:Javascript ascii string to hex byte arrayJavascript ascii字符串到十六进制字节数组
【发布时间】:2013-05-29 10:21:15
【问题描述】:

我正在尝试将 ASCII 字符串转换为字节数组。

问题是我的代码正在从 ASCII 转换为字符串数组而不是字节数组:

var tx = '[86400:?]';
for (a = 0; a < tx.length; a = a + 1) {
    hex.push('0x'+tx.charCodeAt(a).toString(16));
}

这会导致:

 [ '0x5b','0x38','0x36','0x30','0x30','0x30','0x3a','0x3f','0x5d' ]

但我正在寻找的是:

[0x5b,0x38 ,0x30 ,0x30 ,0x30 ,0x30 ,0x3a ,0x3f,0x5d]

如何转换为字节而不是字节字符串?

此数组正在流式传输到 USB 设备:

device.write([0x5b,0x38 ,0x30 ,0x30 ,0x30 ,0x30 ,0x3a ,0x3f,0x5d])

它必须作为一个数组发送,而不是为数组中的每个值循环发送 device.write()。

【问题讨论】:

  • 0x5b 实际上并不是0x5b,而只是一个简单的int,其值为91。将它们保存为 int (tx.charCodeAt(a)),一切都会好起来的。
  • 数字是数字,它们总是以二进制形式存储。如果您想要十六进制表示,请将其存储为字符串(就像现在一样),或使用 hex.push(tx.charCodeAt(a));,它将存储 ASCII 代码,并在打印时使用 .toString(16) 转换为十六进制。

标签: javascript arrays node.js


【解决方案1】:

单班轮:

   '[86400:?]'.split ('').map (function (c) { return c.charCodeAt (0); })

返回

    [91, 56, 54, 52, 48, 48, 58, 63, 93]

当然,这是一个数字数组,而不是严格意义上的“字节数组”。您真的是指“字节数组”吗?

将字符串拆分为单个字符,然后将每个字符映射到其数字代码。

根据您添加的有关device.write 的信息,我发现了这个:

写入设备

使用设备中的 write 调用执行对设备的写入 处理。所有的写入都是同步的。

device.write([0x00, 0x01, 0x01, 0x05, 0xff, 0xff]);

https://npmjs.org/package/node-hid

假设这是你正在使用的,那么我上面的数组会很好地工作:

device.write('[86400:?]'.split ('').map (function (c) { return c.charCodeAt (0); }));

如前所述,0x 符号就是这样一个符号。无论您指定0x0a10012(八进制),值都是相同的。

【讨论】:

  • 谢谢,是的,它必须是一个十六进制字节数组,因为输出流式传输到 USB 设备: device.write([0x5b,0x38 ,0x30 ,0x30 ,0x30 ,0x30 ,0x3a ,0x3f, 0x5d])。所以我真的需要一种创建十六进制字节数组的方法!
  • “字节数组”不是“十六进制”,它通常只是以十六进制表示
  • 你运行的是什么环境? node.js ?
  • 太好了,谢谢,是的,它是 node.js,你的谷歌搜索是正确的,这是使用 node-hid。经过更多测试,我现在明白不必以十六进制格式发送数组,这样您的解决方案就可以工作。再次感谢。
【解决方案2】:
   function getBytes(str){
       let intArray=str.split ('').map (function (c) { return c.charCodeAt (0); });
       let byteArray=new Uint8Array(intArray.length);
       for (let i=0;i<intArray.length;i++)
         byteArray[i]=intArray[i];
       return byteArray;
   }
   device.write(getBytes('[86400:?]'));

【讨论】:

    猜你喜欢
    • 2014-01-02
    • 2013-08-09
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    相关资源
    最近更新 更多