在下面的代码中:
struct ip_header {
unsigned char ip_hl:4;
unsigned char ip_ver:4;
unsigned char ip_dscp:6;
unsigned char ip_ecn:2;
unsigned int ip_len;
unsigned int ip_id;
...
};
...
const struct ip_header * ip_hdr = (const struct ip_header *)(buffer + ETHERNET_HEADER_SIZE);
...
printf("IP DSCP: %u\n", ip_hdr->ip_dcsp);
printf("IP Total Length: %u bytes\n", ip_hdr->ip_len);
...
通常我有
IP DSCP = 0
,并且IP总长度是某个数字< 65535
。每当我得到
IP DSCP = 8
时,总长度就会变成7位数字,即4231532字节。但是我们知道unsigned int范围在0到65535之间。
有人可以解释这里发生了什么吗?
IP DSCP = 8
是什么意思?还是我错过了IP标头长度和IP DSCP之间的某个字段?谢谢 最佳答案
您对诸如int
之类的数据类型的长度的假设是错误的。它们是实现定义的。
如果您需要变量的位数明确定义,则可以使用
uint16_t
int16_t
如果您
#include <stdint.h>
,则可用。关于c - IP DSCP = 8使IP总长度为7位数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20164009/