什么是 endian-reader
endian-reader 是一个可以读取特定字节序的 npm 包。在计算机中,字节序指的是多字节数据在内存中存储的顺序。在不同的计算机体系结构中,字节序的顺序可能是不同的。专业名词为“Endianness”。在一些数据交换场景中这种差异会产生问题。尤其在跨平台开发中,比如一个 Linux 环境下的 C 程序要想读取一个 Windows 环境下的数据时,字节序之间的不同会导致数据错误或解析问题。endian-reader 解决了这种字节序的问题,是专门为 JS、Node.js 开发的。
怎么使用 endian-reader
安装
endian-reader 是一个 npm 包,可以以如下方式安装:
npm install endian-reader
使用
使用 endian-reader 有两个步骤:
- 创建 endian-reader 实例;
- 读取数据。
创建 endian-reader 实例
只需如下传入一个参数,即字节序类型,即可创建 endian-reader 实例:
const EndianReader = require('endian-reader'); // 创建 m1 实例;'BE'表示 big endian字节序 const m1 = new EndianReader('BE'); // 创建 m2 实例;'LE'表示 little endian字节序 const m2 = new EndianReader('LE');
具体的字节序类型可传为字符串 "LE" 或 "BE"。其中,"LE" 表示 little-endian;"BE" 表示 big-endian。
读取数据
endian-reader 实例提供了一些方法来读取数据:
- readByte(): 读取 1 个字节;
- readUInt16(): 读取 2 个字节的无符号整数;
- readUInt32(): 读取 4 个字节的无符号整数;
- readInt16(): 读取 2 个字节的有符号整数;
- readInt32(): 读取 4 个字节的有符号整数。
例如:
-- -------------------- ---- ------- ----- ------------ - ------------------------- ----- - - --- ------------------- ----- --- - ------------- ----- -- - ----- -- -- ----- -- -- ----- -- --- --- ----------------------------- -- --- - ------------------------------- -- --- -- ------------------------------- -- --- ----------
示范
下面的代码演示了如何将任意数据转化为 little endian 字节序:
-- -------------------- ---- ------- ----- ------------ - ------------------------- ----- -- - --- ------------------- ----- -- - --- ------------------- -- ---- --- --- - ----------- -- ----- --------- -- -------- ----- --- - ---------------------- ---------------------- --- -- -------- -- ---- --- ------------ ------------- -------------------------------- -- ------------ -- ---- --- --------------------- -------------------------------- -- -------------
从上面的代码可知,我们将一个大端序的整数转变成了一个小端序的整数来读取。这个演示告诉我们,不同字节序并不会影响数据本身,只会影响数据在内存中的存储方式。
总结
在跨平台开发中,字节序间的差异是十分容易遇到的问题,这时候使用 endian-reader 可以很好地解决这一问题。本文介绍了 endian-reader 的安装和使用方法,并以一个代码示例讲解了如何把数据变成 little endian 字节序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60066e25a563576b7b1ece5b