有时从网络传输/ usdb设备中接收到的数据具有十六进制字符串,例如:
“ 12ADFF1345”
我想以某种方式将这些类型的字符串转换为等效于缓冲区的字符串,以便对其执行一些数学或二进制运算。
你知道我怎么能做到吗?
答案 0 :(得分:2)
使用内置的Buffer
类:
let buf1 = Buffer.from('12ADFF1345', 'hex');
let value = buf1.readInt32LE(0);
let value2 = buf1.readInt16LE(2);
console.log(value,value2);
>> 335523090 5119
// '13ffad12' '13FF' (LE)
>> 313392915 -237
// '12ADFF13' 'ff13' (BE)
https://nodejs.org/api/buffer.html#buffer_class_method_buffer_from_string_encoding
答案 1 :(得分:0)
是的,我知道该怎么做,算法很简单(假设您没有转义符):
0x^first_character_pair^
换句话说,请参见以下代码:
const hexStringToBinaryBuffer = (string) => {
const subStrings = Array.from(string);
let previous = null;
const bytes = [];
_.each(subStrings, (val) => {
if (previous === null) { // Converting every 2 chars as binary data
previous = val;
} else {
const value = parseInt(`0x${previous}${val}`, 16);
bytes.push(value);
previous = null;
}
});
return Buffer.from(bytes);
};
如果您通过网络套接字或USB端口将Buffer.toString('hex')
或等效方法的结果作为字符串传递,而另一端接收到它,则这很有用。