【发布时间】:2012-05-06 04:55:03
【问题描述】:
当您读取一大块字节并需要将它们转换为数字时,node.js 具有 buffer.readInt32BE() 和 buffer.readInt32LE() 之类的功能。
如果我只知道一个文件的前4个字节是一个整数,如果我不知道系统的字节序,我应该使用什么函数?大端还是小端?
进行快速谷歌搜索 (stackoverflow),在 C 中我们可以测试字节顺序:
if ( htonl(47) == 47 ) {
// Big endian
} else {
// Little endian.
}
我们如何测试 node.js 中的字节顺序以正确使用 readInt32BE 和 readInt32Le?
【问题讨论】:
-
您基于什么假设您正在读取的文件是由同一台计算机编写的?您不应该担心知道编写文件的计算机的字节顺序吗?如果你必须从文件中读取,需要担心字节顺序并且文件不包含元数据,那么文件格式是错误的。
-
@Romain - 如果您在 unix-dgram 或 unix 域套接字上侦听 IPC 消息怎么办?我可以合理地期望字节序是相同的(除非作者的字节序被明确记录)。
-
@jimbobmcgee 如果它是一个套接字并且协议是严格的(例如指定字节序),那么您就知道字节序,并且处于相同的情况,就好像您的文件格式具有一些 BOM种类。如果不是,则依赖源以特定方式发出东西是一个糟糕的决定,除非您还拥有源代码(再说一遍,为什么要担心检查?)
标签: node.js endianness