Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中将值转换为十六进制以在数组中发送_Javascript_Arrays - Fatal编程技术网

如何在javascript中将值转换为十六进制以在数组中发送

如何在javascript中将值转换为十六进制以在数组中发送,javascript,arrays,Javascript,Arrays,我试图将一个值放入一个十六进制数组中,通过套接字通过modbus/TCP写入设备。 我的问题是,我无法获得类型类似于byteArrayWriteTemperature元素的hex值。 然后我计算crc来准备要发送的数组,我需要将这个crc附加到数组的最后两个元素中 例如,对于值=45我的数组是: array = [0x01, 0x10, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x2d, 0x23, 0x8d] 如果buff=[0x01,0x10,0x04,0x

我试图将一个值放入一个十六进制数组中,通过套接字通过modbus/TCP写入设备。 我的问题是,我无法获得类型类似于
byteArrayWriteTemperature
元素的
hex
值。 然后我计算
crc
来准备要发送的数组,我需要将这个
crc
附加到数组的最后两个元素中

例如,对于
值=45
我的数组是:

array = [0x01, 0x10, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x2d, 0x23, 0x8d]
如果
buff=[0x01,0x10,0x04,0x00,0x00,0x01,0x02,0x00,0x2d],

最后一个元素是
0x2d
,十进制是
45
,我得到的是crc
swapped=8d23
,而不是
238d
,就像
数组的最后两个元素一样

setTemperature(value: number) {
    console.log('about to set temperature value ', value);
    let hex = value.toString(16)

    const byteArrayWriteTemperature = [0x01, 0x10, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, hex];
    let crc = this.Crc16(byteArrayWriteTemperature, byteArrayWriteTemperature.length)
    console.log('crc ', crc)
    console.log('array: ', byteArrayWriteTemperature);
    this.writeToDevice(byteArrayWriteTemperature)
  }

Crc16(buff, length) {
    let crc = 0xffff;

    for (let pos = 0; pos < length; pos++) {
      crc ^= buff[pos]; // (uint8_t)          // XOR byte into least sig. byte of crc

      for (let i = 8; i != 0; i--) {
        // Loop over each bit
        if ((crc & 0x0001) != 0) {
          // If the LSB is set
          crc >>= 1; // Shift right and XOR 0xA001
          crc ^= 0xa001;
        } else {
          crc >>= 1; // Just shift right
        } // Else LSB is not set
      }
    }
    return crc;
  }
设定温度(值:数字){
console.log('即将设置温度值',值);
设hex=value.toString(16)
常量byteArrayWriteTemperature=[0x01、0x10、0x04、0x00、0x00、0x01、0x02、0x00、十六进制];
设crc=this.Crc16(byteArrayWriteTemperature,byteArrayWriteTemperature.length)
console.log('crc',crc)
log('array:',byteArrayWriteTemperature);
此.writeToDevice(byteArrayWriteTemperature)
}
Crc16(浅黄色,长度){
设crc=0xffff;
for(设pos=0;pos>=1;//右移和异或0xA001
crc^=0xa001;
}否则{
crc>>=1;//只需右移
}//否则未设置LSB
}
}
返回crc;
}
如何正确准备阵列?
谢谢

因此,如果我正确理解了这个问题,您希望您的crc以小尾端顺序存储并附加到数组的末尾

因此,您有:

return crc;
您需要执行以下操作:

return [crc & 0xFF, (crc & 0xFF00) >> 8];
返回一个包含[0x23,0x8d]的数组;假设crc的值为0x8d23

后面的行:

let crc = this.Crc16(byteArrayWriteTemperature, byteArrayWriteTemperature.length);
加:


要将crc附加到byteArrayWriteTemperature数组的末尾

因此,如果我正确理解了这个问题,您希望您的crc以小端点顺序存储并附加到数组的末尾

因此,您有:

return crc;
您需要执行以下操作:

return [crc & 0xFF, (crc & 0xFF00) >> 8];
返回一个包含[0x23,0x8d]的数组;假设crc的值为0x8d23

后面的行:

let crc = this.Crc16(byteArrayWriteTemperature, byteArrayWriteTemperature.length);
加:

将crc附加到byteArrayWriteTemperature数组的末尾