为什么这段代码会出现字节序不匹配的情况?

问题描述 投票:0回答:1

这里是这个小提琴的简单代码:https://jsfiddle.net/vo0aL8h4/2/ 这是关于制作跨浏览器二进制数据读取器/写入器代码时的二进制字节顺序问题。

0x00000101
十进制为257,它被保存为Uint32的二进制文件。它是小端表示吗?

很奇怪,DataView.getUint32 读取错误。 所以我创建了一个小提琴来在浏览器中检查我在 Node 中遇到的问题。


let data = new Uint8Array([0,0,1,1]);
let view = new DataView(data.buffer);
writeLog(`reading little endian data (${data.join()}):  ${view.getUint32(0, true)}`);
writeLog(`reading big endian data (${data.join()}):  ${view.getUint32(0, false)}`);

输出:

reading little endian data (0,0,1,1): 16842752
reading big endian data (0,0,1,1): 257

我错过了什么? DataView.getUint32 与 setUint32 的工作方式不同吗

javascript endianness binary-data
1个回答
0
投票

0x00000101 是十进制的 257,它被保存到二进制文件中 Uint32。它是小端表示吗?

不,这是大端字节序,因为最高有效字节在前面。

© www.soinside.com 2019 - 2024. All rights reserved.