简单说,Buffer就是个类似于咱们电脑里面那种“内存”的东西,用来处理01代码特别方便,如上传文档,编辑文档,甚至还能加密解密啥的。不过麻烦的是,有时候我们可能需要把buffer里的内容按照自己的需求调整一下,比如只保留其中的010这样的数字。那接下来我给你讲讲怎么搞这个事儿,比如说如何让buffer变成十六进制字符串,或者转化为数值等等。
将Buffer类型转换为十六进制字符串
看好了吗?首先得把Buffer变成16进制字符串才能开始计算。这可是小菜一碟,只是用Buffer对象里的toString()方法就能解决!比如我们这儿有个叫’abcd’的Buffer,想让它变身成为16进制字符串该咋整?接着往下看这段代码:
“`
我们把’abcd’这些字母写成UTF8格式后,塞到 buf 里面去。
咱们就把buf给调出来,弄个名字叫hexString。
调试窗口输出了这个字符串:61626364,没问题啊!
const buf = Buffer.from('abcd', 'utf8'); const hexString = buf.toString('hex'); // "61626364"
搞定,我们成功将”abcd”这个字母变成了十六进制形式的’61626364’,厉害?
将十六进制字符串转换为数字类型
你知道吗,JavaScript中的数值有很多种表达方式!除了咱们常用的十进制,还有二进制、八进制和十六进制!如果想将十六进制的线条换成数字,那就用parseInt(),别忘了选择参数16哈~比如,那个”61626364″的十六进制字符串,转换成真正的数字就是1633837924喔!
const hexString =’61626364′;
这个16进制码就当作普通数字看待,方便估算出咱自家电脑的实际数值!
试下呗,就在控制台输个数字,比如:1633837924。
const hexString = '61626364'; const num = parseInt(hexString, 16); // 1633837924
好了,那个’61626364’这样的十六进制数已经被我们存到变量num里变成了整数1633837924。
直接将Buffer类型转换为数字类型
咱能别纠结buf是不是得先转字符再转回来吗?您试试 Node.js里那个read方法,拿出例如[0x01, 0x02, 0x03, 0x04]这种字节数组做例子,用下readUInt32BE()就能变成整数了哦~
瞧这!我用Buffer.from造了个小队列,塞满了0x01 0x02 0x03和0x04这几样儿!
咱们就直接看这个buf里面的4,261,598,76,按照UBX32的聪明办法来解读哈。
const buf = Buffer.from([0x01, 0x02, 0x03, 0x04]); const num = buf.readUInt32BE(); // 16909060
别着急,让我教你怎么搞定这事:装个浏览器瞧瞧,你会发现那些看似神秘的数字其实都有其含义。比如,那个16909060,其实就是指这个东西
搞定之前buf里面保存着的那串儿数字,就是[0x01, 0x02, 0x03, 0x04]这下子已经顺利转换成了无符号的32位数字,猜猜看结果是多少?16909060~
将Buffer类型转换为其他类型的数字
咋办?别慌,除了我刚才说的办法,你可能还得把buffer里的字符弄成别的数字格式。比如,处理浮点位,或是考虑负数等等。这回儿,咱们可以用read这个神奇工具去读几个字节,再让它自己理解这些代码就好了拿例子来说,我们先设置一个buffer,给它塞入一些像[77f8e5884d55aa18978a0878e2201014, 0xb0, 0x00, 0x00]这种字节组合,然后叫出readFloatBE()函数,分分钟钟就让它们变成浮点数!
告诉你个妙招,我们弄出了个超炫酷的小东西,就四个字节搞定了!那就是:0xA1(大写A)、0XC8(把字母和数字混起来的那个C)、0x00(空白空格理解?)、0x00(又是两遍零)。
读取数字,buf里读的。
console.log(num);//输出:22.5
const buf = Buffer.from([0x41, 0xb0, 0x00, 0x00]); const num = buf.readFloatBE(); // 11
看到这份代码没?哪里有个“缓冲区”,里面藏着个四位数的字节串[77f8e5884d55aa18978a0878e2201014, 0xb0, 0x00, 0x00]。然而神奇的事情就是,这个字节串竟然能变成整数- 22.5!真是让人瞠目结舌!
乖乖,听我说,Node.js有个办法可以把Buffer转变成各种各样的数值类型!这样就不用愁怎么搞定电脑里的那些乱七八糟的二进制文件了,用Node.js也会更溜~所以,咱们必须要掌握这个小秘诀~
评论0