我正在做一个sparetime项目,在Arduino Duemilanove上做一些服务器代码,但在我在控制器上测试这些代码之前,我会在我自己的机器(基于OS的macbook)上测试它。我在一些地方使用int,我担心在Arduino Duemilanove上编译和运行代码时会出现奇怪的错误,因为Arduino将int处理为2字节,而我的macbook将int处理为4字节。我不是一个铁杆的C和C++程序员,所以我有点担心一个有经验的程序员会如何处理这种情况。我是否应该限制代码的类型定义,将我自己的定义和int限制为2个字节?还是有别的办法呢?
发布于 2010-07-21 06:16:27
最好的方法是使用stdint.h标头。它定义了显式引用变量的符号和大小的typedefs。例如,16位无符号整数是uint16_t。它是C99标准的一部分,因此几乎在任何地方都可以使用。请参见:
http://en.wikipedia.org/wiki/Stdint.h
发布于 2010-07-21 06:15:57
C标准将int定义为一个带符号的类型,大到至少可以容纳-32768到32767之间的所有整数。实现可以自由选择更大的类型,并且任何现代32位系统都会选择32位整数。但是,正如您所看到的,一些嵌入式平台仍然使用16位整数。如果您的arduino编译器支持uint16_t或uint32_t,我建议您使用它;如果不支持,请使用预处理器宏来自己定义这些类型。
发布于 2010-07-21 06:44:53
处理这种情况的正确方法是根据需要表示的值选择类型:
如果是一般的小整数,并且范围在-32767到32767之间,请使用int;
long;
long long.
short (或者,如果范围在-2147483647到2147483647之间,则使用signed char )。只要您没有做任何其他假设,这些(即总是使用sizeof而不是假定类型的宽度),那么您的代码将是可移植的。
通常,对于通过二进制接口与另一个系统交换的值,您应该只需要使用stdint.h中的固定宽度类型。从网络或文件读取或写入网络或文件。
https://stackoverflow.com/questions/3294816
复制相似问题