不同Java或C#、原始数据的类型C++可以在不同的大小取决于平台。例如, int 是不能保证一个32位整数。各种编译器的环境中定义的数据类型(例如 uint32dword 为此目的,但似乎没有任何标准,包括文件,用于固定大小的数据类型。

有什么推荐的方法来实现最大的便携性?

有帮助吗?

解决方案

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

一般更好不是发明本身轮(这将产生维修和测试)。

其他提示

创建名为types.h中一个标题文件,并定义所有的固定大小的原语则需要类型(INT32,UINT32,UINT8等)。支持多种平台,您可以使用#ifdef的或有一个单独的目录包括为每个平台(include_x86,include_x86_64,include_sparc)。在后一种情况下,你将不得不为每个平台,这将有单独的生成配置的权利包括在其包含路径的目录。第二种方法是优选的,根据“C ++的缺陷”由Stephen杜赫斯特。

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

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

如果您正在使用升压,我相信它也提供了相当的东西的stdint头。

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

两件事情:

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

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

我希望这有助于。 。

ķ

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

<强> __ INT8 (无符号__int8)

<强> __ INT16 (无符号__int16)

<强> __ INT32 (无符号__int32)

<强> __的int64 (无符号__int64)

尝试使用升压/ cstdint.hpp

有一个stdint.h头所定义的C99标准和(I think)一些变种或另一种ISO C++。这定义很好的类型,如int16_t,uint64_t,等等。它保证有一个具体的大小和代表性。不幸的是,它提供不准确的标准(Microsoft特别是一只脚牵引机这里)。

简单的回答是,这适用于每一个32或64位字节址的建筑,我意识到:

  • 所有char变量是1byte
  • 所有短短的变量是2个字节
  • 所有int变量的4个字节
  • 不要用"长期",这是不确定的大小。
  • 所有已知的汇编者支持64位数学允许"漫长"作为本机64位类型。

要知道,有些32位编译器没有64位类型,所以使用长期漫长将会限制你的64位系统和一个小组编译器(其中包括海湾合作委员会和MSVC,所以大多数人不会关心这个问题)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top