我正在使用C ++开发一个多平台应用程序(iOS,Android等)。
C ++标准中是否存在基本类型,它们保证固定宽度,并可跨多个平台移植?
我正在寻找固定宽度类型,如Int32,UInt32,Int16,UInt16,Float32等。
答案 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。
请注意,不同的系统也可能具有不同的字节序,因此通过网络传输这些字符串永远不会安全。