2013-06-03 3 views
0

Я пытаюсь преобразовать строку ASCII в массив байтов.Javascript ascii string в hex-массив байтов

Проблема мой код является преобразование из 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

'0x5b' на самом деле не' 0x5b', а скорее просто 'int' со значением' 91'. Сохраните их как int ('tx.charCodeAt (a)'), и все будет хорошо. – h2ooooooo

+1

Номера - это числа, и они всегда хранятся в двоичном формате. Если вы хотите получить шестнадцатеричное представление, сохраните его как строку (как вы сейчас) или используйте «hex.push (tx.charCodeAt (a));', который будет хранить коды ASCII и использовать '.toString (16) 'для преобразования в hex во время печати. – Osiris

+0

Возможный дубликат [JavaScript Преобразование строковых значений в hex] (http: // stackoverflow.com/questions/1527077/javascript-convertting-string-values-to-hex) –

ответ

9

Один лайнер:

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

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

Предполагая, что это то, что вы используете, то мой массив выше, будет работать отлично:

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

Как было отмечено 0x обозначения только что, обозначение. Указываете ли вы 0x0a или 10 или 012 (в восьмеричном), то значение будет таким же.

+0

Спасибо, да, он должен быть массивом Hex-байтов, поскольку вывод передается на USB-устройство: device.write ([0x5b, 0x38, 0x30 , 0x30, 0x30, 0x30, 0x3a, 0x3f, 0x5d]). Поэтому мне действительно нужен способ создания массива с шестнадцатеричным байтом! – crankshaft

+2

«байтовый массив» не является «шестнадцатеричным», он часто просто представлен в шестнадцатеричном виде. – Alnitak

+0

В какой среде вы работаете? node.js? – HBP

Смежные вопросы