我正在创建三个结构:
struct ethernet {
uint16_t dest_mac;
};
struct ip {
uint16_t src_ip;
uint16_t dest_ip;
};
struct udp {
uint16_t porten I
};
然后我创建结构实例,然后将其复制到字符缓冲区中。
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 *pat = NULL;
pat = (struct pattern *)buffer;
当我执行此操作时,pat->pttn 的值未按预期出现。
示例:
当我传递值时: dest_mac = 1 、 src_ip = 2 、 dest_ip = 3 、 port = 4 。 pat->pttn 的值是 131073 。根据我的说法,该值应该是:281483566841860
最佳答案
由 4 个相邻的 16 位整数组成的 64 位 [无符号] 整数的值取决于系统架构,并且取决于架构的“字节顺序”。
关于c - 当将 char 指针指向的内存类型转换为无符号整数时,传入的值与预期不符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26309702/