/ / Impresión del contenido de un Javascript Uint8Array como bytes en bruto - javascript, cadena, datos binarios

Imprimir los contenidos de un Javascript Uint8Array como bytes sin formato - javascript, string, binary-data

Tengo un Uint8Array en Javascript que me gustaría imprimir el contenido de la consola, por ejemplo

255, 19, 42, 0

Este es mi código, que actualmente imprime una cadena vacía

    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);

Puedo ver los datos en el depurador si configuro unpunto de interrupción, por lo que los bytes se están llenando definitivamente. Cuando intenté imprimir a través de otro método, convirtió todos los bytes a ASCII, pero mis datos están en su mayoría fuera del rango de impresión ASCII.

¿Hay un equivalente a printf () en JavaScript?

Respuestas

3 para la respuesta № 1

los concat el método no actúa como un búfer al que se puede agregar, sino que devuelve una nueva cadena.

Por lo tanto, tienes que asignar el resultado de concat a su cadena de resultados en cada invocación:

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

Implementado así, tu debugBytes La cadena terminará conteniendo una lista separada por comas de los valores de bytes.


Una solución más concisa es convertir tu Uint8Array a una matriz de Javascript regular, y luego use el join método:

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

No hay printf En la norma ECMAScript actual, existen varias implementaciones personalizadas. Mira esto pregunta para algunas sugerencias.