JS与Python的字节数组编码

我试图将字节数组转换为string,然后通过套接字发送到远程服务器。 我已经成功地在Python原型的代码,并试图将其迁移到Javascript

由于某种原因,这两种语言之间的最后一个字符有差异。

Python代码

def make_checksum(data): num = 0x00 for num2 in data: num = (num + num2) & 0xFF return num data = [0x56, 0x54, 0x55, 0x3E, 0x28, 0x00, 0x08, 0x00, 0x03, 0x01, 0x46, 0x00, 0x00, 0x00, 0xC0] message = bytearray(data + [make_checksum(data)]) 

使用Javascript

 function checksum(data) { let res = 0x00 for (let i = 0; i < data.length; ++i) { res = (res + data[i]) & 0xFF } return String.fromCharCode(res) } let data = new Int8Array([0x56, 0x54, 0x55, 0x3E, 0x28, 0x00, 0x08, 0x00, 0x03, 0x01, 0x46, 0x00, 0x00, 0x00, 0xC0]) let message = String.fromCharCode(...data) + checksum(data) 

我认为这可能与asciiUTF之间的区别。

在@Ryan的帮助下,我能够通过使用Buffer而不是无符号数组来解决这个问题。

 function checksum(data) { let res = 0x00 for (let i = 0; i < data.length; ++i) { res = (res + data[i]) & 0xFF } return Buffer.from([res]) } let data = Buffer.from([0x56, 0x54, 0x55, 0x3E, 0x28, 0x00, 0x08, 0x00, 0x03, 0x01, 0x4F, 0x00, 0x00, 0x00]) console.log(Buffer.concat([data, checksum(data)]))