node.js node.js里面.readUInt16BE是什么意思啊
发布于 8 年前 作者 MrLhx 6658 次浏览 来自 问答

var buffer2=new Buffer(4); buffer2[0]=0x3; buffer2[1]=0x4; buffer2[2]=0x23; buffer2[3]=0x42; console.log(buffer2.readUInt16BE(0)); console.log(buffer2.readUInt16LE(0)); console.log(buffer2.readUInt16BE(1)); console.log(buffer2.readUInt16LE(1)); console.log(buffer2.readUInt16BE(2)); console.log(buffer2.readUInt16LE(2)); //这里输出的772 1027 1059 8964 是如何来的啊

4 回复

var buffer2=new Buffer(4); //创建了4个byte的buffer buffer2[0]=0x3; // 给第一个byte存入 16进制的3, 以下类似 buffer2[1]=0x4; buffer2[2]=0x23; buffer2[3]=0x42; // 此时存入之后, 在buffer里面就是 0x3, 0x4, 0x23, 0x42, 在内存里面以连续的4个byte存储, 在电脑里面就是一连串0和1 构成的数字 如0x3 就是 0000 0011, 而0x4 则是 0000 0100, 0x23 = 00100011, 0x42 = 01000010, 在内存里面连续方式存取就是00000011, 00000100, 00100011, 01000010 console.log(buffer2.readUInt16BE(0)); // 这个意思就是从左边开始第一个byte起读16位,然后转换为10进制正整数(unit), 也就是00000011,00000100 == 0x0304, 使用parseInt(‘0000001100000100’, 2) 就可以得到 772, 从第二个byte开始读就是00000100, 00100011, parseInt(‘0000010000100011’, 2) === 1059

console.log(buffer2.readUInt16LE(0)); //这个就是从右边开始读16位然后转换为10进制正整数(unit), 也就是0000001,100000100, 00100011, 01000010中从0位开始先取16个数字, 00000011,00000100, 然后右边的一个byte当做数字的高位, 也就是parseInt(‘0000010000000011’, 2) === 1027 console.log(buffer2.readUInt16BE(1)); console.log(buffer2.readUInt16LE(1)); console.log(buffer2.readUInt16BE(2)); console.log(buffer2.readUInt16LE(2));

le 和be是指 little endian, big endian, 中文应该是大端小端, 搞出这种区别是因为cpu的设计者各自设计自己的,然后互相不屌对方, 没有统一起来,intel是小的, 摩托罗拉和IBM是大的,各自有自己的考虑和实现,放在nodejs这里大小端是为了方便和不同编码的数据交换。

另外 new Buffer([])这个已经是要被替代的接口了, 新的接口是 Buffer.from 如果做web开发的话,很少遇到这个问题吧, 我们是和硬件交互的时候需要用到这个buffer来解析数据。

@likai24 谢谢大神 问了很多人都不知道,我刚刚开始学 看的教程里面让输出这段话

@likai24 大神再问一个问题 fs.open(‘t1.txt’,‘w+’,function(err,fd){} 这里的fd是什么意思

@MrLhx file descriptor文件描述符, 不要问我这是什么, 问baidu。 https://nodejs.org/api/fs.html#fs_fs_open_path_flags_mode_callback

回到顶部