/ / Друк вмісту Javascript Uint8Array як необроблений байт - JavaScript, рядок, двійкові дані

Друк вмісту Javascript Uint8Array як сировинних байтів - javascript, string, binary-data

У мене є JavaScript Uint8Array в Javascript, який я хотів би надрукувати вміст на консолі, наприклад

255, 19, 42, 0

Це мій код, який наразі друкує порожній рядок

    var bytes = new Uint8Array(data);

var debugBytes = "";
for(var i=0; i<bytes.byteLength; i++) {
debugBytes.concat(bytes[i].toString());
debugBytes.concat(",");
}

console.log("Processing packet [" + bytes[1] + "] " + debugBytes);

Я можу побачити дані у відладчику, якщо я встановив аточка розриву, тому байти точно заповнюються. Коли я спробував друкувати за допомогою іншого методу, він перетворив усі байти в ASCII, але мої дані здебільшого виходять за межі діапазону друку ASCII.

Чи є еквівалент printf () в JavaScript?

Відповіді:

3 для відповіді № 1

The concat метод не працює як буфер, до якого ви можете додати, а швидше повертає новий рядок.

Тому ви повинні призначити результат concat до рядка результатів при кожному виклику:

 debugBytes = debugBytes.concat(bytes[i].toString());
debugBytes = debugBytes.concat(",");

Реалізовано так, ваше debugBytes рядок в кінцевому підсумку містить розділений комою список значень байтів.


Більш лаконічне рішення - перетворити своє Uint8Array до звичайного масиву Javascript, а потім використовуйте join спосіб:

console.log(Array.apply([], bytes).join(","));

Там ні printf методу в поточному стандарті ECMAScript, однак існує ряд спеціальних реалізацій. Дивіться це питання для деяких пропозицій.