C语言中,32位平台,64位平台,各种数据类型的长度定义不同,如果不准备在32和64位(没准还需要和128位)之间移植程序,则没有什么大问题,如果要考虑到移植,这种定义的不同就非常麻烦。Java之类的语言就是好呀,不需要考虑这些问题,数据类型的长度都是确定的。
|
32平台长度(bytes) |
64位平台长度(bytes) |
char |
1 |
1 |
short int |
2 |
2 |
int |
4 |
4 |
long int |
4 |
8 |
long long int |
8 |
8 |
long |
4 |
8 |
long long |
8 |
8 |
float |
4 |
4 |
double |
8 |
8 |
size_t |
4 |
8 |
ssize_t |
4 |
8 |
另外:size_t/ssize_t就是longunsigned int/long int。如果你在程序中使用到了size_t或者ssize_t就一定要用longunsigned int/long int
因为系统的函数会返回上述的这些值,所以必须知道他们的大小并进行相应的防错性转换。而另外的情况,你需要跨不同平台固定数据长度数据类型的话,可以使用一些定长的数据类型,这样子就不会混淆了,类似:
int8_t/int16_t/int32_t/int64_t
uint8_t/uint16_t/uint32_t/uint64_t
但是这些定长数据类型和上述的平台字长相关的数据类型之间转换的时候,一定要注意匹配呀,别搞错了数据表达的范围。