Windows内存心得

Windows内存心得

Windows的内存中,数据的存储并不是像我们想象的那样,它涉及从高位读和从低位读的问题。

例如:LONG x1=0x12345678,  x1在内存中显示为78  56 34  12;

      WORD x2=0x1234,  x2在内存中显示为34  12

即,windows已经定义的数据类型,以BYTE为单位,从高到低在内存中显示(BYTE内数据的高低位不交换)。

 

但是如果出现下面的情形时,结果如何呢?

typedef struct Data2Cal

{

     BYTEbySignal    : 4;

     BYTEbyData2Cal1 : 4;

     BYTEbyData2Cal2 : 4;

     BYTEbyData2Cal3 : 4;

}DATA2CAL;

DATA2CAL data2Cal;

data2Cal. bySignal = 0x1

data2Cal. byData2Cal1 = 0x2;

data2Cal. byData2Cal2 = 0x3;

data2Cal. byData2Cal3 = 0x4;

那么在内存中,data2Cal显示为什么呢?

经过测试,data2Cal显示为21  43

 

typedef struct Data1Cal

{

     BYTEbySignal    : 1;

     BYTEbyData2Cal1 : 1;

     BYTEbyData2Cal2 : 1;

     BYTEbyData2Cal3 : 1;

     BYTEbyData2Cal4 : 1;

     BYTEbyData2Cal5 : 1;

     BYTEbyData2Cal6 : 1;

     BYTEbyData2Cal7 : 1;

}DATA1CAL;

DATA1CAL data1Cal;

data1Cal. bySignal = 1;

data1Cal. byData2Cal1 = 0;

data1Cal. byData2Cal2 = 1;

data1Cal. byData2Cal3 = 0;

data1Cal. byData2Cal4 = 0;

data1Cal. byData2Cal5 = 1;

data1Cal. byData2Cal6 = 0;

data1Cal. byData2Cal7 = 1;

 

那么在内存中,data1Cal显示为什么呢?

经过测试,data2Cal显示为A5

 

typedef struct Data1Cal

{

     BYTEbySignal    : 1;

     BYTEbyData2Cal1 : 3;

     BYTEbyData2Cal2 : 1;

     BYTEbyData2Cal3 : 3;

}DATA1CAL;

DATA1CAL data1Cal;

data1Cal. bySignal = 1;

data1Cal. byData2Cal1 = 3;

data1Cal. byData2Cal2 = 1;

data1Cal. byData2Cal3 = 2;

那么在内存中,data1Cal显示为什么呢?

经过测试,data2Cal显示为57

 

由上可见:

    当把BYTE拆开使用时,windows不仅把临近的两个分量高低互换,而且把高4和低4互换, 它的高低字节并不交换.

 

 

typedef struct Data1Cal

{

     BYTEbySignal;

     BYTEbyData2Cal1;

}DATA1CAL;

DATA1CAL data1Cal;

data1Cal. bySignal = 0x12;

data1Cal. byData2Cal1 = 0x34;

那么在内存中,data1Cal显示为什么呢?

经过测试,data2Cal显示为12  34

即:自定义的结构体未拆分BYTE,显示也不同与基本类型,它的高低字节并不交换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值