c++ portable conversion of long to double

前端 未结 1 1114
無奈伤痛
無奈伤痛 2021-01-21 20:13

I need to accurately convert a long representing bits to a double and my soluton shall be portable to different architectures (being able to be standard across compilers as g++

1条回答
  •  野趣味
    野趣味 (楼主)
    2021-01-21 20:36

    First off, using "long" isn't portable. Use the fixed length integer types found in stdint.h. This will alleviate the need to check for the same size, since you'll know what size the integer will be.

    The reason you are getting a warning is that left shifting 32 bits on the 32 bit intger is undefined behavior. What's bad about shifting a 32-bit variable 32 bits?

    Also see this answer: Is it safe to assume sizeof(double) >= sizeof(void*)? It should be safe to assume that a double is 64bits, and then you can use a uint64_t to store the raw hex. No need to check for sizes, and everything is portable.

    0 讨论(0)
提交回复
热议问题