From 842355c831404cc1aa3d9ac0918eed0c2d2a86fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Manuel=20Tom=C3=A1s?= Date: Sat, 11 Jul 2020 23:26:03 -0300 Subject: Fix decoding --- ipc.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'ipc.cpp') diff --git a/ipc.cpp b/ipc.cpp index 9c96d5a..7d46307 100644 --- a/ipc.cpp +++ b/ipc.cpp @@ -9,29 +9,32 @@ enum Operation { OP_SHOW }; -void encode2(int16_t data, uint8_t *message, size_t offset) { +void encode2(int16_t data, int8_t *message, size_t offset) { message[offset] = data & 0x00ff; message[offset + 1] = (data & 0xff00) >> 8; } -int16_t decode2(uint8_t *message, size_t offset) { - return message[offset] | ((int16_t)message[offset + 1] << 8); +int16_t decode2(int8_t *message, size_t offset) { + return (int16_t)message[offset + 1] << 8 & 0xff00 + | (int16_t)message[offset] & 0x00ff; } -void encode4(int32_t data, uint8_t *message, size_t offset) { +void encode4(int32_t data, int8_t *message, size_t offset) { encode2( data & 0x0000ffff, message, offset); encode2((data & 0xffff0000) >> 16, message, offset + 2); } -int32_t decode4(uint8_t *message, size_t offset) { - return decode2(message, offset) | ((int32_t)decode2(message, offset + 2) << 16); +int32_t decode4(int8_t *message, size_t offset) { + return (int32_t)decode2(message, offset + 2) << 16 & 0xffff0000 + | (int32_t)decode2(message, offset) & 0x0000ffff; } -void encode8(int64_t data, uint8_t *message, size_t offset) { +void encode8(int64_t data, int8_t *message, size_t offset) { encode4( data & 0x00000000ffffffff, message, offset); encode4((data & 0xffffffff00000000) >> 32, message, offset + 4); } -int64_t decode8(uint8_t *message, size_t offset) { - return decode4(message, offset) | ((int64_t)decode4(message, offset + 4) << 32); +int64_t decode8(int8_t *message, size_t offset) { + return (int64_t)decode4(message, offset + 4) << 32 & 0xffffffff00000000 + | (int64_t)decode4(message, offset) & 0x00000000ffffffff; } -- cgit v1.2.3