暖宝宝官方认证铲屎官
nodejs中处理十六进制
发布于: 2021-03-10 更新于: 2021-03-11 分类于: nodejs 阅读次数: 

有时候吧,与硬件交互时,常常需要用十六进制来通信,下面罗列一些简单操作

整型之间互转

十进制转十六进制

1
2
let num = 100;
console.log(num.toString(16));// 64

十六进制转十进制

1
2
let num = 0x100;
console.log(num.toString(10));// 256

用toString来进行转换,其它进制也是同样的操作

整型与Buffer互转

整型转Buffer

1
2
3
let num = 0xA5AB;
console.log(Buffer.alloc(2, num.toString(16), 'hex'));// <Buffer a5 ab>
console.log(Buffer.from(num.toString(16), 'hex'));// <Buffer a5 ab>

两种方式均可以转换成希望的结果
再看一个例子

1
2
3
let num = 0x0400;
console.log(Buffer.alloc(2, num, 'hex'));// <Buffer 00 00>
console.log(Buffer.from(num.toString(16), 'hex'));// <Buffer 40>

两种方式的输出都不对,这是因为第一位为0,buffer接收时是按0x400接收的,所以就出现了上面的情况,为了能正常转换为两个字节,只能自己处理一下了

1
2
3
let num = 0x0400;
console.log(Buffer.alloc(2, `0${num.toString(16)}`, 'hex'));// <Buffer 04 00>
console.log(Buffer.from(`0${num.toString(16)}`, 'hex'));// <Buffer 04 00>

这时能正常转换

Buffer转整型

1
2
3
let num = 0x0400;
let tem = Buffer.from(`0${num.toString(16)}`, 'hex').toString('hex');
console.log(parseInt(`0x${tem}`));// 1024

这样即可

--- 本文结束 The End ---