Javascript шестнадцатеричная строка от CharCode
Шестнадцатеричная строка:
var str = [0x6A, 0xE8, 0x05, 0x01, 0x00, 0x01, 0xD9, 0xDC, 0x0A, 0x09];
byte = '';
for (var i=0; i < str.length; i++) {
byte += String.fromCharCode( parseInt(str[i], 16).toString(16) );
}
Но приемник покажет:
6A C3A8 05 01 00 01 C399 C39C 0A 09
Есть идеи как сохранить 2 байта? Или, возможно, мой код неверен, особенно для nodejs?
* Обновлен скрипт. Я немного знаком с nodejs, и мне нравится видеть то, что предлагают nodejs для неблокирующих событий, потому что в "напряженный" день у меня есть некоторые недостающие данные. Получил скрипт, работающий на python, используя binascii.(Un)hexlify и PHP mbstring (un)pack (для просмотра в Интернете).
Ожидая:
6A E8 05 01 00 01 D9 DC 0A 09
2 ответа
Ваш код, кажется, работает для меня, если я расшифрую его снова. Осторожно, хотя с for() циклы над объектами в Javacript. Это также перебирает свойства объекта.
var str = [0x6A, 0xE8, 0x05, 0x01, 0x00, 0x01, 0xD9, 0xDC, 0x0A, 0x09];
byte = '';
for (var i=0; i < str.length; i++) {
byte += String.fromCharCode( parseInt(str[i], 16).toString(16) );
}
var hexarrayout = [];
for (var i=0; i<byte.length; i++) {
hexarrayout.push(byte.charCodeAt(i).toString(16));
}
alert(hexarrayout);
Пример на http://jsfiddle.net/ycG4n/
Ваша проблема очень похожа на проблему преобразования utf8<=>iso-.../ascii/etc при отправке на приемник, когда некоторые из ваших 1-байтовых строковых символов преобразуются в 2-байтовые. Из-за частичной обратной совместимости UTF-8, некоторые из ваших шестнадцатеричных значений будут сохраняться 1 байтом.
Даже если ты пишешь 0x6A
в вашем коде JavaScript автоматически воспринимает его как значение 106. Это уже число, поэтому parseInt()
не будет ничего с этим делать и может быть удален.
Вы можете просто захотеть сделать это:
var str = [0x6A,0xE8...];
var byte = String.fromCharCode.apply(null,str);