首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++中的跨平台原始数据类型

C++中的跨平台原始数据类型
EN

Stack Overflow用户
提问于 2009-09-06 13:41:32
回答 7查看 15.2K关注 0票数 11

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

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

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-09-06 14:17:38

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

通常比发明自己的轮子(需要维护和测试)要好。

票数 11
EN

Stack Overflow用户

发布于 2009-09-06 13:55:21

创建一个名为types.h的头文件,并定义所需的所有固定大小的原始类型(int32、uint32、uint8等)。要支持多个平台,你可以使用#ifdef的,或者为每个平台(include_x86,include_x86_64,include_sparc)创建一个单独的包含目录。在后一种情况下,你将为每个平台都有单独的构建配置,这将在它们的包含路径中包含正确的包含目录。根据Stephen Dewhurst的"The C++ Gotchas“,第二种方法更可取。

顺便说一句,如果您计划在不同平台之间传递二进制数据,您还必须考虑字节顺序。

票数 8
EN

Stack Overflow用户

发布于 2009-09-06 13:55:50

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

如果您使用的是boost,我相信它也提供了一些与stdint头文件等效的东西。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1385709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档