diff --git a/src/framework/net/inputmessage.cpp b/src/framework/net/inputmessage.cpp index 9b59fdd8..d1bba756 100644 --- a/src/framework/net/inputmessage.cpp +++ b/src/framework/net/inputmessage.cpp @@ -47,7 +47,7 @@ uint8 InputMessage::getU8(bool peek) uint16 InputMessage::getU16(bool peek) { checkRead(2); - uint16 v = *(uint16_t*)(m_buffer + m_readPos); + uint16 v = Fw::readLE16(m_buffer + m_readPos); if(!peek) m_readPos += 2; @@ -58,7 +58,7 @@ uint16 InputMessage::getU16(bool peek) uint32 InputMessage::getU32(bool peek) { checkRead(4); - uint32 v = *(uint32*)(m_buffer + m_readPos); + uint32 v = Fw::readLE32(m_buffer + m_readPos); if(!peek) m_readPos += 4; @@ -69,7 +69,7 @@ uint32 InputMessage::getU32(bool peek) uint64 InputMessage::getU64(bool peek) { checkRead(8); - uint64 v = *(uint64*)(m_buffer + m_readPos); + uint64 v = Fw::readLE64(m_buffer + m_readPos); if(!peek) m_readPos += 8; diff --git a/src/framework/net/outputmessage.cpp b/src/framework/net/outputmessage.cpp index e6c4a8f0..d1e956c2 100644 --- a/src/framework/net/outputmessage.cpp +++ b/src/framework/net/outputmessage.cpp @@ -44,7 +44,7 @@ void OutputMessage::addU8(uint8 value) void OutputMessage::addU16(uint16 value) { checkWrite(2); - *(uint16_t*)(m_buffer + m_writePos) = value; + Fw::writeLE16(m_buffer + m_writePos, value); m_writePos += 2; m_messageSize += 2; } @@ -52,7 +52,7 @@ void OutputMessage::addU16(uint16 value) void OutputMessage::addU32(uint32 value) { checkWrite(4); - *(uint32*)(m_buffer + m_writePos) = value; + Fw::writeLE32(m_buffer + m_writePos, value); m_writePos += 4; m_messageSize += 4; } @@ -60,7 +60,7 @@ void OutputMessage::addU32(uint32 value) void OutputMessage::addU64(uint64 value) { checkWrite(8); - *(uint64*)(m_buffer + m_writePos) = value; + Fw::writeLE64(m_buffer + m_writePos, value); m_writePos += 8; m_messageSize += 8; } diff --git a/src/framework/util/tools.h b/src/framework/util/tools.h index 6127ca07..bd0287ec 100644 --- a/src/framework/util/tools.h +++ b/src/framework/util/tools.h @@ -56,6 +56,14 @@ inline uint32 getU32(std::istream& in) { return tmp; } +inline uint16 readLE16(uchar *addr) { return (uint16)addr[1] << 8 | addr[0]; } +inline uint32 readLE32(uchar *addr) { return (uint32)readLE16(addr + 2) << 16 | readLE16(addr); } +inline uint64 readLE64(uchar *addr) { return (uint64)readLE32(addr + 4) << 32 | readLE32(addr); } + +inline void writeLE16(uchar *addr, uint16 value) { addr[1] = value >> 8; addr[0] = (uint8)value; } +inline void writeLE32(uchar *addr, uint32 value) { writeLE16(addr + 2, value >> 16); writeLE16(addr, (uint16)value); } +inline void writeLE64(uchar *addr, uint64 value) { writeLE16(addr + 4, value >> 32); writeLE32(addr, (uint32)value); } + // fills an ostream by concatenating args inline void fillOstream(std::ostringstream&) { } template