gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 03:13:20 26 4
gpt4 key购买 nike

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

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

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

使用Crc16()方法,如果buff = [0x01, 0x10, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x2d]其中最后一个元素是 0x2d (十进制为 45),我得到 crc swapped = 8d23 而不是 238d就像数组的最后2个元素

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;
}

如何正确准备阵列?谢谢

最佳答案

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

所以你所在的地方:

return crc;

你需要做:

return [crc & 0xFF, (crc & 0xFF00) >> 8];

这将返回一个包含 [0x23, 0x8d] 的数组;假设crc的值为0x8d23

之后的行:

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

添加:

byteArrayWriteTemperature = byteArrayWriteTemperature.concat(crc);

将 crc 附加到 byteArrayWriteTemperature 数组的末尾

关于javascript - 如何将值转换为十六进制以在javascript中以数组形式发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59893961/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com