gpt4 book ai didi

在 C 中创建 IP header

转载 作者:太空宇宙 更新时间:2023-11-04 02:54:09 25 4
gpt4 key购买 nike

我正在尝试用 C 语言创建一个 IP header 。

typedef struct header
{
//IP-Header
unsigned char ip_v:4, ip_hl:4;/* this means that each member is 4 bits */
unsigned char ip_tos; //1 Byte
unsigned short int ip_len; //2 Byte
unsigned short int ip_id; //2 Byte
unsigned short int ip_off; //2 Byte
unsigned char ip_ttl; //1 Byte
unsigned char ip_p; //1 Byte
unsigned short int ip_sum; //2 Byte
unsigned int ip_src; //4 Byte
unsigned int ip_dst; //4 Byte


} __attribute__((packed)) ipheader;

现在我想使用结构并将十六进制值保存在变量中。

int main()
{
ipheader iph;

iph.ip_v='\x4';
iph.ip_hl='\x5';
iph.ip_tos='\x00';

return 0;
}

如何将103C写入iph.ip_len?这种结构是存储 IP header 的好方法吗?

最佳答案

如何使用 iphdr结构?

除此之外,您应该注意字节序(请参阅 ntohlhtonl 函数),具体取决于您要对其中的数据执行的操作(您没有说)。另见 why endianess matters among bits inside a byte?关于 iphdr 中的字节顺序。

为了编写值本身,您可以使用您使用的标准/编译器允许的任何格式,例如二进制文字,如果您使用带有适当标志的正确 GCC 版本,或八进制,或十进制,或字符数组,或 ...

下面是一些不同文字格式的例子:

十六进制:0x103C

字符数组:(char *){ 10, 60 }(char *){ 10, '<' }

八进制:010074

二进制:0b1000000111100

如果您不在不同类型之间移动值或对它们进行一些时髦的数学运算,您甚至不需要强制转换 - 否则编译器会将这些值解释为 int这对您来说可能是个问题,尤其是因为签名不同。在那种情况下,只需前缀 (uint16_t)或任何您需要的(您应该使用系统中定义的相同类型 - 请参阅我的答案顶部关于 iphdr 的建议 - 或固定长度定义,以避免可移植性问题或 future 更新问题)

关于在 C 中创建 IP header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19346128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com