一.64位兼容
64位到底意味了什么.通常:长整型和指针数据类新使用64位,而其他数据类型可能使用32位.
1.首先遇到的问题是不安全的类型转换
int i=(int)pointer;
如果在64位机器下,pointer是64位长度的.
因此追加了void *类型到c标准中去,由gcc支持:
void *p=pointer
这样可以安全的将一个指针存储在一些通用的类型中.
二.字节序
字节序:一种是最重要的字节优先存储,另一种是最不重要的字节优先存储
相反最低位数据放在低地址就是小头字节序
那么字节序到底会导致什么问题呢
例子:
#include
#include
static inline int little_endian()
{
int endian=1;
return (0==(*(char *)&endian));
}
void broken_endian_example()
{
union
{
int i;
char j[sizeof(int)];
}test={0xdeadbeef};
int i=0;
for(i=0;i { printf("test.h[%d]=0x%x\n",i,test.j[i]); } } int main(int argc,char **argv) { printf("this machine is "); little_endian() printf("big"):printf("little"); printf("endian\n"); printf("this program was build on a machine that is :"); #if BYTE_ORDER==BIG_ENDIAN printf("big endian\n"); #else #if BYTE_ORDER==LITTLE_ENDIAN printf("little endian\n"); #else printf("something weird\n"); #endif #endif printf("and here is a silly example...\n"); broken_endian_example(); exit(0); }