首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么8位字段会有字节顺序?

为什么8位字段会有字节顺序?
EN

Stack Overflow用户
提问于 2009-05-14 15:35:06
回答 6查看 7.5K关注 0票数 15

请参阅/netinet/tcp.h中的TCP报头定义:

代码语言:javascript
复制
struct tcphdr
  {
    u_int16_t th_sport;         /* source port */
    u_int16_t th_dport;         /* destination port */
    tcp_seq th_seq;             /* sequence number */
    tcp_seq th_ack;             /* acknowledgement number */
#  if __BYTE_ORDER == __LITTLE_ENDIAN
    u_int8_t th_x2:4;           /* (unused) */
    u_int8_t th_off:4;          /* data offset */
#  endif
#  if __BYTE_ORDER == __BIG_ENDIAN
    u_int8_t th_off:4;          /* data offset */
    u_int8_t th_x2:4;           /* (unused) */
#  endif
    u_int8_t th_flags;
#  define TH_FIN        0x01
#  define TH_SYN        0x02
#  define TH_RST        0x04
#  define TH_PUSH       0x08
#  define TH_ACK        0x10
#  define TH_URG        0x20
    u_int16_t th_win;           /* window */
    u_int16_t th_sum;           /* checksum */
    u_int16_t th_urp;           /* urgent pointer */
};

为什么8位字段的字节顺序不同?我认为只有16位和32位字段与字节顺序有关,您可以分别使用ntohs和ntohl在字节顺序之间进行转换。用来处理8位数据的函数是什么?如果没有,那么在小端机器上使用此头的TCP似乎不能与大端机器上的TCP一起工作。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-05-14 15:42:27

有两种顺序。一个是字节顺序,一个是位域顺序。在C语言中,位字段的顺序没有标准的顺序。这取决于编译器。通常,位字段的顺序在大端和小端之间颠倒。

票数 21
EN

Stack Overflow用户

发布于 2009-05-14 15:43:42

这是依赖于编译器且不可移植的。位字段的顺序取决于实现,这里使用8位字段和移位/掩码来获得子字段会好得多。

票数 11
EN

Stack Overflow用户

发布于 2009-05-14 15:43:25

在这台机器中,字节顺序也可能指的是位顺序和字节顺序。This wikipedia article提到,有时会出现这种情况。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/864077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档