int32在所有平台上的大小是否相同?

时间:2014-06-25 14:15:57

标签: c++

我正在使用C ++开发一个多平台应用程序(iOS,Android等)。

C ++标准中是否存在基本类型,它们保证固定宽度,并可跨多个平台移植?

我正在寻找固定宽度类型,如Int32,UInt32,Int16,UInt16,Float32等。

3 个答案:

答案 0 :(得分:3)

int32是自定义typedef,默认情况下仅存在int。如果您需要指定的宽度,请查看stdint.h

#include <cstdint>

int32_t integer32bits;

我不认为标准中存在任何浮点数,如果我错了,请纠正我。

答案 1 :(得分:1)

浮点数几乎总是32位,除了在一些不符合IEEE 754的模糊平台上。你很可能不必费心去做。整数类型可能会有所不同,但如果您的目标平台具有符合C ++ 11的编译器,则可以使用cstdint标头以标准方式访问特定大小的类型。如果你不能使用C ++ 11,那么你很可能需要为每个平台提供单独的代码。

答案 2 :(得分:1)

<stdint.h><cstdint>中的定义可用于移植:

  • int32_t保证是有符号32位类型的typedef,或根本不存在。由于这是C ++,您可以使用enable_if来决定行动方案。
  • int_least32_t是最小类型的typedef,至少有32位
  • int_fast32_t是类型的typedef,其类型至少为32位且可以高效运行(例如,如果内存总线为64位宽且不允许部分存储,则使用64位更快类型和浪费内存而不是执行读 - 修改 - 写访问)

另见The difference of int8_t, int_least8_t and int_fast8_t

请注意,不同的系统也可能具有不同的字节序,因此通过网络传输这些字符串永远不会安全。