我需要存储一个项目数组,每个项目的长度为32位。所以目前我正在使用long
数组。但是我现在在另一台机器上进行编译,其中long
是64位。这在签名号码时会产生问题。 (即在两台机器上打印相同的数字,一个是负数(32位),另一个是正数(64位)。
所以计划是切换到int32_t
,问题是当使用格式字符串打印数字时,说明符需要与32位计算机int32_t
上的不同定义为一个long
,在64位计算机上,它被定义为int
。
确保在它编译的任何机器上都是32位的最佳方法是什么,并且可以打印这个数字?看起来这很麻烦,并且应该有一个更简单/更简单的方法来获得32位长度的项目数组。
答案 0 :(得分:3)
正确的做法是
#include <inttypes.h>
然后使用格式说明符宏之一:
void show(int32_t the_integer) {
printf("The 32-value is %" PRId32 " in decimal.\n", the_integer);
}
请参阅http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/inttypes.h.html
答案 1 :(得分:2)
<inttypes.h>
中定义的宏可以帮助解决这个问题。你用
"%" PRId32
作为您的打印格式说明符,一切都会很好。