将Javascript Uint8Array的内容打印为原始字节

amo*_*amo 0 javascript string binary-data

我有一个用Java语言编写的Uint8Array,我想将其内容打印到控制台,例如

255, 19, 42, 0
Run Code Online (Sandbox Code Playgroud)

这是我的代码,当前显示一个空字符串

    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);
Run Code Online (Sandbox Code Playgroud)

如果设置了断点,我可以在调试器中看到数据,因此字节肯定会被填充。当我尝试通过另一种方法进行打印时,它将所有字节转换为ASCII,但是我的数据大部分不在ASCII可打印范围内。

JavaScript中有与printf()等效的东西吗?

Rob*_*sen 5

concat方法的作用不像可以附加到的缓冲区,而是返回一个新字符串。

因此,您必须concat在每次调用时将结果分配给结果字符串:

 debugBytes = debugBytes.concat(bytes[i].toString());
 debugBytes = debugBytes.concat(",");
Run Code Online (Sandbox Code Playgroud)

这样实现后,您的debugBytes字符串最终将包含一个逗号分隔的字节值列表。


更为简洁的解决方案是将您的代码转换Uint8Array为常规Javascript数组,然后使用以下join方法:

console.log(Array.apply([], bytes).join(","));
Run Code Online (Sandbox Code Playgroud)

printf当前的ECMAScript标准中没有方法,但是有许多自定义实现。请参阅此问题以获取一些建议。