JavaScript Bytes (Uint8Array) для строки и обратно в байты или шестнадцатеричную строкуJavascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 JavaScript Bytes (Uint8Array) для строки и обратно в байты или шестнадцатеричную строку

Сообщение Anonymous »

Необходимо создать обмен пакетами с аппаратным устройством через Com -порт, в C, C ++ - не является проблемой с типами VAR, такими как int/uint с двоичной длиной, но в JS - все переменные подписаны.
Запрос устройства:

Код: Выделить всё

[ 0x0A, 0xC7, 0xAC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xAF ]
< /code>
Ответ устройства: < /p>
[ 0xFE, 0x9A, 0xAC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0x9B ]
< /code>
32 байта за пакет, где 0x00 - заполненные данные, отправляйте данные - без проблем: < /p>
something.write(new Uint8Array(packets.request))
< /code>
all fine. < /p>
Ответ устройства Parse - в JS - Проблемы с кодированием полученных данных, полученные как кодируемый текст, а не как двоичные данные. < /p>
Пример для повторения: < /p>
let bytes = new Uint8Array(packets.answer);
let text = new TextDecoder('ascii').decode(bytes);

console.log(bytes);
console.log(text);
console.log(text.getBytes());
console.log(text.split("").map(c => c.charCodeAt(0).toString(16).padStart(2, "0")).join(' '));
Outputs:

Uint8Array(32) [254, 154, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 155, buffer:
ArrayBuffer(32), byteLength: 32, byteOffset: 0, length: 32,
Symbol(Symbol.toStringTag): 'Uint8Array'] þ𬠤›
(32) [254, 353, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 8250] fe 161 ac 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 a4
203a
< /blockquote>
Мы все знаем об ASCII и 353?let x = [ 0x7E, 0x7F, 0x80, 0x81, 0x82 ];
let bytes = new Uint8Array(x);
let text = new TextDecoder('ascii').decode(bytes);

console.log(bytes);
console.log(text);
console.log(text.getBytes());
console.log(text.split("").map(c => c.charCodeAt(0).toString(16).padStart(2, "0")).join(' '));
< /code>
Вывод: < /p>

uint8array (5) [126, 127, 128, 129, 130, буфер: Arraybuffer (5),
bytelength: 5, byteoffset: 0, длина: 5, symbol. (5) [126, 127, 8364, 129, 8218] 7E 7F 20AC 81 201A


Подробнее здесь: https://stackoverflow.com/questions/796 ... hex-string
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»