这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 0x02 我的0x02哪去了?

共2条 1/1 1 跳转至

0x02 我的0x02哪去了?

院士
2006-09-17 18:14:16     打赏
0x02 我的0x02哪去了?



关键词: 我的     去了    

院士
2006-12-22 22:43:00     打赏
2楼
问 最近一直被一个问题困扰
定义一个结构和一个缓冲区以及一个指针
typedef struct
{
   uint8  a1;
   uint16 a2;
}TEST;
uint8 buf[10]={0x01,0x02,0x03,0x04};
TEST * temp;

uint8 b1;
uint16 b2;
temp = (TEST *) buf;  
b1 = temp->a1;
b2 = temp->a2;
结果应该是 b1 = 0x01;b2 = 0x0203
可仿真的结果是 b1 = 0x01;b2 = 0x0003
我的0x02哪去了???请教怎么解决?谢谢诸位大侠
1: 也许跟CPU的类型有关你用的是什么CPU?编译器呢? 2: packed struct 3: 估计是uint8 buf[10]定义有问题,类型不匹配 4: 同意cwal20同意cwal20
估计是uint8 buf[10]定义有问题,类型不匹配 5: 是这样的cpu 就是LPC2210 编译器是ADS1.2
uint8 以被定义 #define unsigned char uint8 6: 字节对齐方式,ARM是32位的,我在移植TCP/IP时,就碰到IP Header和UDP Header存在类似的情况,示例如下
typedef __packed struct TIPHeader
{
    // IP header
/*
     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |Ver= 4 |IHL= 5 |Type of Service|        Total Length = 21      |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |      Identification = 111     |Flg=0|   Fragment Offset = 0   |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |   Time = 123  |  Protocol = 1 |        header checksum        |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                         source address                        |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                      destination address                      |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                    Options                    |    Padding    | < optional
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |     data      ..........
    +-+-+-+-+-+-+-+-+
*/

    u8            VerLen;
    u8            TOS;
    u16            TotalLength;    
    u16            ID;        
    u16            Fragment;    
    u8            TTL;
    u8            Protocol;
    u16            Checksum;    
    T_IP_Addr    SourceIP;
    T_IP_Addr    DestIP;
} T_IP_Header; 7: 有什么好的解决方法没?主要是别丢数据.
我也是在写TCP/IP协议栈的时候遇到的问题.
比较烦 8: 我觉得ADS1.2的结构体分配内存有问题你可以想办法查看一下 sizeof(TEST)到底多大,估计不是3。

我在做文件系统的MBR结构时遇到过结构体不能正常分配的问题。

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]