16进制与buffer相互转换
程序员文章站
2024-03-18 14:18:34
...
16进制与buffer相互转换
- 一个字节是8位,相当于16进制2位,因此为了方便表示,很多情况下,buffer打印出来是16进制显示的,但是本质上还是2进制,就好比buffer里边的 11111111 打印出来之后就会显示 ff
首先说说16进制转buffer
- 假设有一个数组,[1a, 2b, 3c, 4d, 5e, 6f]想要转成buffer,代码如下:
var array = ['1a', '2b', '3c', '4d', '5e', '6f']
var hex_array = array.map(el=>parseInt(el, 16))
var uarray = new Uint8Array(hex_array)
var buf = Buffer.from(uarray)
console.log(buf)
// 打印结果
<Buffer 1a 2b 3c 4d 5e 6f>
- 基于上面的思路,可以封装成一个函数:
// 16进制转buffer
function hex_to_buffer(__array){
if(!Array.isArray(__array)){
return hex_array([__array])
}
var hex_array = __array.map(el=>parseInt(el, 16))
var uarray = new Uint8Array(hex_array)
return Buffer.from(uarray)
}
buffer转16进制
- 以上一个例子为例,如何实现buffer转16进制,代码如下:
function hex_to_buffer(__array){
if(!Array.isArray(__array)){
return hex_array([__array])
}
var hex_array = __array.map(el=>parseInt(el, 16))
var uarray = new Uint8Array(hex_array)
return Buffer.from(uarray)
}
var array = ['1a', '2b', '3c', '4d', '5e', '6f']
var buf = hex_to_buffer(array) // 获取buffer <Buffer 1a 2b 3c 4d 5e 6f>
// buffer转16进制
var uarray = Array.prototype.slice.call(buf)
var hex_array = uarray.map(el=>Number(el).toString(16))
console.log(hex_array)
- 基于上面的思路,可以封装一个函数:
// buffer转16进制
function buffer_to_hex(__buffer){
var uarray = Array.prototype.slice.call(__buffer)
return uarray.map(el=>Number(el).toString(16))
}