J'essaie de convertir un tableau d'octets en une chaîne, puis de l'envoyer sur un socket à un serveur distant. J'ai prototypé avec succès le code dans Python et essaye de le faire migrer vers Javascript.JS vs Python byte array encoding
Pour une raison quelconque, il existe une divergence dans le dernier caractère entre les deux langues.
Python code
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)
Je pense que cela pourrait avoir quelque chose à voir avec la différence entre ascii et UTF.
Si le javascript accomplirez 'somme de contrôle (données)' au lieu de 'somme de contrôle (0xC0)'? Le python devrait-il faire 'bytearray (data + [make_checksum (data)])? – mgilson
Si 'message' est un octet, vous ne devez pas le représenter avec une chaîne en JavaScript. Laissez-le comme un «Uint8Array». – Ryan
est-ce qu'on parle de nœud ou de navigateur JS ici? Vous ne pouvez pas représenter un tableau d'octets comme une chaîne car tous les tableaux d'octets ne sont pas valides. – Lux