1
バイト配列を文字列に変換し、それをソケット経由でリモートサーバーに送信しようとしています。私はPythonでコードのプロトタイプ作成に成功し、Javascriptに移行しようとしています。JS対Pythonのバイト配列のエンコーディング
何らかの理由で、2つの言語の間に最後の文字に矛盾があります。
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)
私は、これはアスキーとUTFの違いとは何かを持っているかもしれないと思います。
にはJavaScriptを代わりに ''チェックサム(0xC0の) ''のチェックサム(データを)やるべき? Pythonが 'bytearray(data + [make_checksum(data)])'を実行すべきか? – mgilson
'message'がバイトの場合は、JavaScriptで文字列で表現しないでください。 'Uint8Array'のままにしておきます。 – Ryan
ここでノードについて、またはブラウザJSについて話しますか?すべてのバイト配列が有効なユニコードではないため、バイト配列を文字列として表すことはできません。 – Lux