在对char指针指向无符号整数的内存进行类型转换时,值的变化不符合预期

时间:2014-10-11 00:05:54

标签: c

我正在创建三个结构:

struct ethernet {
    uint16_t dest_mac;
};

struct ip {
    uint16_t src_ip;
    uint16_t dest_ip;
};

struct udp {
    uint16_t porten I
};

然后我创建了结构实例,然后在char缓冲区中复制。

memcpy(buffer , eth , sizeof(struct ethernet));
    memcpy(buffer + sizeof(struct ethernet) , ipe , sizeof(struct ip));
    memcpy((buffer + sizeof(struct ethernet) + sizeof(struct ip)) , udpe , sizeof(struct udp));

现在我定义另一个结构:

struct pattern {
    uint64_t pttn;
};

现在我将上面定义的char缓冲区指向的内存类型转换为struct pattern。

struct pattern *pat = NULL;
pat = (struct pattern *)buffer;

当我进行此操作时,pat-> pttn的值未按预期进行。

示例:

当我传递值时:dest_mac = 1,src_ip = 2,dest_ip = 3,port = 4. pat-> pttn的值为131073。据我说,应该来的价值是:281483566841860

1 个答案:

答案 0 :(得分:0)

64位[无符号]整数的值,由4个相邻的16位整数组成,取决于系统架构,并取决于"字节序"的架构。