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

Node.js 将十六进制字符串转换为二进制数据并放入缓冲区,node.js,Node.js,有时,从网络传输/usdb设备接收到的数据具有十六进制字符串,例如: “12ADFF1345” 我希望这些类型的字符串以某种方式被转换成一个二进制等价的缓冲区,以便对它们执行一些数学或二进制操作 你知道我如何做到这一点吗?是的,我知道如何做到这一点,算法很简单(假设你没有转义字符): 将读取的字符串拆分为一个字符 将每个字符对分组 然后生成字符串0x^第一个字符对^ 用基数16解析上面的字符串 换句话说,请参考以下代码: const hexStringToBinaryBuffer = (stri

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

“12ADFF1345”

我希望这些类型的字符串以某种方式被转换成一个二进制等价的缓冲区,以便对它们执行一些数学或二进制操作


你知道我如何做到这一点吗?

是的,我知道如何做到这一点,算法很简单(假设你没有转义字符):

  • 将读取的字符串拆分为一个字符
  • 将每个字符对分组
  • 然后生成字符串
    0x^第一个字符对^
  • 用基数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);
    };
    

    如果您将
    缓冲区的结果作为字符串传递,则此选项非常有用。toString('hex')
    或等效方法通过网络套接字或usb端口,另一端接收到它。

    使用内置
    缓冲区
    类:

    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)