将十六进制字符串转换为二进制数据并放入缓冲区

时间:2018-12-31 17:17:04

标签: node.js

有时从网络传输/ usdb设备中接收到的数据具有十六进制字符串,例如:

  

“ 12ADFF1345”

我想以某种方式将这些类型的字符串转换为等效于缓冲区的字符串,以便对其执行一些数学或二进制运算。

你知道我怎么能做到吗?

2 个答案:

答案 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)

是的,我知道该怎么做,算法很简单(假设您没有转义符):

  1. 将读取的字符串拆分为一个字符。
  2. 将每个字符对分组。
  3. 然后生成字符串0x^first_character_pair^
  4. parseInt以16为底的上面的字符串

换句话说,请参见以下代码:

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')或等效方法的结果作为字符串传递,而另一端接收到它,则这很有用。