JS vs Python字节数组编码

时间:2017-09-07 03:29:09

标签: javascript python node.js byte

我正在尝试将字节数组转换为字符串,然后通过套接字将其发送到远程服务器。我已成功将代码原型化为 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)

我认为这可能与 ascii UTF 之间的区别有关。

1 个答案:

答案 0 :(得分:2)

@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)]))