diff Core/Endianness.h @ 2706:0511feaf0ec2

fix for LSB
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 06 Jul 2018 16:48:48 +0200
parents 6d5e36e1256f
children 38a3054b22ff
line wrap: on
line diff
--- a/Core/Endianness.h	Fri Jul 06 16:33:03 2018 +0200
+++ b/Core/Endianness.h	Fri Jul 06 16:48:48 2018 +0200
@@ -145,7 +145,13 @@
 
 static inline uint16_t __orthanc_bswap16(uint16_t a)
 {
-  return (a << 8) | (a >> 8);
+  const uint8_t* p = reinterpret_cast<const uint8_t*>(&a);
+  return (static_cast<uint32_t>(p[0]) << 8 |
+          static_cast<uint32_t>(p[1]));
+
+  // WARNING: The implementation below makes LSB (Linux Standard
+  // Base) segfault in release builds. Don't use it!!!
+  // return (a << 8) | (a >> 8);
 }
 
 static inline uint32_t __orthanc_bswap32(uint32_t a)