用C跨平台的原始数据类型++(Cross-platform primitive data types

2019-08-04 00:42发布

不像Java或C#,C ++中的原始数据类型可以根据平台的尺寸而变化。 例如, int是不能保证是32位整数。 各种编译器的环境中定义的数据类型如uint32dword用于此目的,但似乎没有标准包括用于固定大小的数据类型的文件。

什么是实现最大的可移植性推荐的方法?

Answer 1:

我发现这头特别有用: BOOST cstdint

通常不是发明自己的车轮(其招维护和测试)更好。



Answer 2:

创建一个名为types.h中头文件,并确定你所需要的固定大小的原始类型(INT32,UINT32,UINT8,等等)。 支持多种平台,您可以使用#ifdef的或有一个单独的包括为每个平台目录(include_x86,include_x86_64,include_sparc)。 在后一种情况下,你会在他们的include路径为每个平台单独构建配置,这将有正确的目录里。 第二种方法是优选的,根据“C ++的缺陷”由Stephen杜赫斯特。

只是顺便说一句,如果你正计划通过不同平台之间的二进制数据,你也不必担心字节顺序。



Answer 3:

C99标准的一部分是一个stdint.h头文件提供这类信息。 例如,它定义了一个名为uint32_t的类型。 不幸的是,很多编译器不支持stdint.h。 我见过stdint.h最好的跨平台实现是在这里: http://www.azillionmonkeys.com/qed/pstdint.h 。 你可以只包括在您的项目。

如果您使用升压,我相信它也提供了一些相当于stdint头。



Answer 4:

定义类型(例如INT32)在头文件中。 对于每个平台使用其他的#ifdef并确保IN32是一个32位整数。 无处不在代码中使用INT32,并确保当您编译在不同的平台上使用定义权



Answer 5:

两件事情:

首先,有一个头文件名为limits.h中,让很多有用的平台的信息。 它会给最大值和最小值为例如int类型。 从这一点,你可以推断出int类型是有多大。

你也可以使用sizeof操作符在运行时为这些目的了。

我希望这有帮助 。 。 。

ķ



Answer 6:

有由ISO C ++的C99标准和(我认为)一些变体或其他限定的stdint.h头。 这定义好的类型,如int16_t,uint64_t中,等等......这些都保证有一个特定的大小和代表性。 不幸的是,它的有效性是不完全标准(微软尤其是脚的牵引机在这里)。

简单的答案是这样的,它在每一个32位或64位字节寻址体系结构我知道的工作:

  • 所有字符变量1个字节
  • 所有短变量是2个字节
  • 所有INT变量是4字节
  • 请勿使用“长”,这是不确定的大小。
  • 与64位运算支持所有已知的编译器允许“很久很久”作为原生64位类型。

要知道,有些32位编译器不具有一个64位的类型可言,所以使用很长很长会限制你到64个系统和一套编译器的小型(包括GCC和MSVC,所以大多数人不会在乎这个问题)。



Answer 7:

如果它的名字以两个下划线(_)开始,数据类型是非标准的。

__int8(无符号__int8)

__int16(无符号__int16)

__int32(无符号__int32)

__int64(无符号__int64)

尝试使用升压/ cstdint.hpp



文章来源: Cross-platform primitive data types in C++