Javascript ascii字符串到十六进制字节数组

时间:2013-06-03 09:38:21

标签: javascript arrays node.js

我正在尝试将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()。

2 个答案:

答案 0 :(得分:12)

单线:

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

返回

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

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

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

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

  

写入设备

     

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

     

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

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

假设这是你正在使用的,那么我上面的数组将非常有效:

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

正如已经注意到的那样,0x符号只是一种符号。无论您指定0x0a还是10还是012(八进制),值都是相同的。

答案 1 :(得分:1)

   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:?]'));