簡體   English   中英

Javascript ascii 字符串到十六進制字節數組

[英]Javascript ascii string to hex byte array

我正在嘗試將 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()。

單班輪:

   '[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表示法只是一種表示法。 無論您指定0x0a還是10012 (八進制),該值都是相同的。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM