小编Joh*_*ook的帖子

Raspberry Pi上的endianess问题

我刚开始使用C++进行一些原始网络编程,并且已经在我的Raspberry Pi上进行编译(没有交叉编译).这使得一切都变成了小尾数.

在构建我的IP头之后,我计算了IP校验和,但它总是出错(基于这里的例子http://www.thegeekstuff.com/2012/05/ip-header-checksum/).

升级gdb,我把我的问题解决了IP头中前32位的排序.该示例使用0x4500003C,表示版本4(0x4),IHL 5(0x5),TOS 0(0x00)和tot_length 60(0x003C).所以我把我的数据包设置为相同.

struct iphdr* ip; // Also some mallocing
ip->version = 4;
ip->ihl = 5;
ip->tos = 0;
ip->tot_len = 60;
Run Code Online (Sandbox Code Playgroud)

现在在gdb中,我检查了前32位,期待0x3C000045因为字节序,但我得到了这个:

(gdb) print ip
$1 = (iphdr *) 0x11018
(gdb) x/1xw 0x11018
0x11018:        0x003c0045
Run Code Online (Sandbox Code Playgroud)

前16位是小端(0x0045),但第二位,包含十进制60,似乎是大端(0x003C)!

是什么给这个?我疯了吗?我对结构体内的字节顺序完全错了吗?(这是一个明确的可能性)

c++ endianness

6
推荐指数
1
解决办法
4736
查看次数

标签 统计

c++ ×1

endianness ×1