首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的电脑和Arduino上的不同整数大小

我的电脑和Arduino上的不同整数大小
EN

Stack Overflow用户
提问于 2010-07-21 06:11:57
回答 5查看 3K关注 0票数 3

我正在做一个sparetime项目,在Arduino Duemilanove上做一些服务器代码,但在我在控制器上测试这些代码之前,我会在我自己的机器(基于OS的macbook)上测试它。我在一些地方使用int,我担心在Arduino Duemilanove上编译和运行代码时会出现奇怪的错误,因为Arduino将int处理为2字节,而我的macbook将int处理为4字节。我不是一个铁杆的C和C++程序员,所以我有点担心一个有经验的程序员会如何处理这种情况。我是否应该限制代码的类型定义,将我自己的定义和int限制为2个字节?还是有别的办法呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-07-21 06:16:27

最好的方法是使用stdint.h标头。它定义了显式引用变量的符号和大小的typedefs。例如,16位无符号整数是uint16_t。它是C99标准的一部分,因此几乎在任何地方都可以使用。请参见:

http://en.wikipedia.org/wiki/Stdint.h

票数 11
EN

Stack Overflow用户

发布于 2010-07-21 06:15:57

C标准将int定义为一个带符号的类型,大到至少可以容纳-32768到32767之间的所有整数。实现可以自由选择更大的类型,并且任何现代32位系统都会选择32位整数。但是,正如您所看到的,一些嵌入式平台仍然使用16位整数。如果您的arduino编译器支持uint16_tuint32_t,我建议您使用它;如果不支持,请使用预处理器宏来自己定义这些类型。

票数 6
EN

Stack Overflow用户

发布于 2010-07-21 06:44:53

处理这种情况的正确方法是根据需要表示的值选择类型:

如果是一般的小整数,并且范围在-32767到32767之间,请使用int;

  • Otherwise,如果范围在-2147483647到2147483647之间,请使用long;

  • Otherwise,long long.

  • If
  • 范围在-32767到32767之间,并且空间效率很重要,请使用short (或者,如果范围在-2147483647到2147483647之间,则使用signed char )。

只要您没有做任何其他假设,这些(即总是使用sizeof而不是假定类型的宽度),那么您的代码将是可移植的。

通常,对于通过二进制接口与另一个系统交换的值,您应该只需要使用stdint.h中的固定宽度类型。从网络或文件读取或写入网络或文件。

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

https://stackoverflow.com/questions/3294816

复制
相关文章

相似问题

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