【发布时间】:2021-03-20 01:07:47
【问题描述】:
我们知道Endianness 有两种类型 - 大端 (BE) 和小端 (LE)。所以通常我们在应用层有 LE,即所谓的“主机字节顺序”。
通常在应用程序中,我们将传输协议的主机字节顺序(LE)端口转换为网络字节顺序(BE)这样的方式:
struct sockaddr_in sockaddr = {0};
// ...
sockaddr.sin_port = htons(60592);
几乎所有网络协议都使用 BE 字节表示。
在此示例中,主机字节顺序中的60592 将是ECB0,正如我的计算器所说的那样。所以我认为它应该在传输头内部交换到B0EC,但事实并非如此。我哪里错了?
【问题讨论】:
-
我相信你有它倒退。存储在 LE 中的数字 60592 实际上是 0xB0EC。
-
“我们知道有两种类型的字节序 - 大字节序 (BE) 和小字节序 (LE)”。我多么希望那是真的。幸运的是,除非你想支持 40 多年前的硬件,否则你可以假装它是。
标签: c networking tcp udp endianness