如何在javascript中将值转换为十六进制以在数组中发送
我试图将一个值放入一个十六进制数组中,通过套接字通过modbus/TCP写入设备。 我的问题是,我无法获得类型类似于如何在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
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
,我得到的是crcswapped=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数组的末尾