int 是平台相关的,它可能是2字节,也可能是4字节。
u_int8_t 是平台无关的,在任何平台下,它都代表8位无符号数。u代表unsigned, int8代表8位(1字节), t是系统数据类型的意思。
int 变量的长度一般和机器字长相同,在 32 位机上是 4 字节,在 16 位机上为 2 字节" ,所以一般不同的机型,开始要用sizeof检测,然后用typedef 宏定义才能做到移植性比较高
举例说明:(如果int 为4为)
typedef int int_4;
u_int8_t一定为8位,u_int16_t一定为16位。
这句话错了。u_int8_t 的长度只是不小于 8 位,并不是一定为 8 位, u_int_t 类似。
那short类型,long类型,还有float及double类型呢?怎么在不同机器字长的机器上,如何区分short类型,long类型,还有flo ... 都不一定的,这个主要是通过sizeof 先测试一下,为你让你的程序可以移植,一般的做法是通过typedef重新定义一套适合自己的类型,举例如下:
如果你现在的机器,你通过sizeof测试发现 int 是16位 ,long为32位,你可以定义如下:
typedef int int16
typedef long int32
typedef ....
...
如果你的程序需要移植到其他的机型,你通过sizeof测试发现此机器的int为32位,long为64位,但short为16位,int为32位这时候,你只需要改变你现有程序的typedef定义,既:
typedef short int16
typedef int int32
可以把typedef放到.h头文件,以后移植只需要改变.h头文件既可
阅读(413) | 评论(0) | 转发(0) |