X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=code%2Fstage1%2Fsrc%2FUtil%2Futils.c;h=efd4dd2fe8d08f335574aa44e5ce018fc1fc4cc6;hb=ebf1280e432d51f47238ce8df86750ba3a7d6d1f;hp=9713e30ef3f00727a9f9f7bb6b3f3b824f52ae2e;hpb=aa7daeaacfda268c392adf1c5efbccea77be9fe0;p=epclust.git diff --git a/code/stage1/src/Util/utils.c b/code/stage1/src/Util/utils.c index 9713e30..efd4dd2 100644 --- a/code/stage1/src/Util/utils.c +++ b/code/stage1/src/Util/utils.c @@ -58,24 +58,45 @@ char readReal(FILE* stream, Real* real) } // convert n-bytes binary integers to uint32_t -uint32_t bInt_to_uint(Byte* pInteger, size_t bytesCount) +uint32_t bInt_to_uint(Byte* pInteger) { - uint32_t integer = 0; - for (size_t i = 0; i < bytesCount; i++) - integer += ((uint32_t) (pInteger[i])) << (i << 3); - return integer; + uint32_t res; + memcpy(&res, pInteger, 4); + return res; } -// serialize integers with a portable bytes order -void write_int(uint32_t integer, size_t bytesCount, Byte* buffer) +// serialize integers +void write_int(uint32_t x, Byte* buffer) { - Byte chunk; - // write from left to right, from least to most significative bit - for (size_t i = 0; i < bytesCount; i++) - { - chunk = (integer >> (i << 3)) & 0xFF; - buffer[i] = chunk; - } + union { + uint32_t i; + char bytes[4]; + } u; + u.i = x; + for (size_t i = 0; i < 4; i++) + buffer[i] = u.bytes[i]; +} + +//WARNING: assuming float is 32bits... +// convert 4-bytes binary float to float +float bReal_to_double(Byte* pFloat) +{ + float res; + memcpy(&res, pFloat, 4); + return res; +} + +//WARNING: assuming float is 32bits... +// serialize double with a NON-portable bytes order +void write_real(float x, Byte* buffer) +{ + union { + float d; + char bytes[4]; + } u; + u.d = x; + for (size_t i = 0; i < 4; i++) + buffer[i] = u.bytes[i]; } // Expected size of a Work message in bytes: