windows与linux中的基础数据类型长度问题

来源:互联网 发布:保罗加索尔总决赛数据 编辑:程序博客网 时间:2024/05/16 11:24

今天加班,打算把代码从WINDOWS移植到LINUX去。突然出现一个获取不到值的问题。百思不得其解!

由于是两个终端间传输数据时该数据出的问题,于是用GDB和VS去调。

LINUX中为发送端,WINDOWS为接收端。

发送端数据完全正确,再看WINDOWS中接收数据。从内存看,一位一位读,没问题啊!

监视去看..后面错完了..什么情况!

这段数据是个结构体,大概的结构如下:

struct A

{

     unsigned int a;

     unsigned long b;

};

struct B

{

    unsigned int a;

    A                     b[0];

}

想了半天没想到什么原因,于是去看内存,完全没问题!

顺手在即时窗口中打了sizeof(long),结果为4...

4!

什么情况!

gdb p sizeof(long)

gdb 8

好吧...

百度了一下

得出以下结论:

32位与64位的数据类型长度是不一样的,而且windows和linux也有些许区别,下面把64位下的数据长度列表如下(无符号unsigned和有符号的长度一样):

                   linux64             windows64        linux32         windows32

char              8                        8                       8                      8

short            16                       16                    16                     16

int                32                       32                     32                   32

long              64                      32                     32                    32


long long      64                      64                    64                     64

size_t           64                      64                    32                      32


今天总算知道了 多平台编程,避免使用long与size_t。

希望以后自己能记住...
0 0
原创粉丝点击