gpt4 book ai didi

仅根据现有 u_char 的一部分在 C 中创建新变量

转载 作者:行者123 更新时间:2023-11-30 14:30:31 26 4
gpt4 key购买 nike

我正在编写一些 C 代码来解析 IEEE 802.11 帧,但我一直在尝试创建一个新变量,该变量的长度取决于帧本身的大小。

这是我目前拥有的代码:

int frame_body_len = pkt_hdr->len - radio_hdr->len - wifi_hdr_len - 4;
u_char *frame_body = (u_char *) (packet + radio_hdr->len + wifi_hdr_len);

基本上,帧由 header 、主体和末尾的校验和组成。我可以通过获取数据包的长度并减去出现在其前面的两个 header 的长度(分别为 radio_hdr->lenwifi_hdr_len 来计算帧主体的长度),最后加上 4 个字节作为校验和。

但是,如何创建没有尾随校验和的 frame_body 变量?现在,我使用从两个 header 之后的位置开始的数据包内容来初始化它,但是有什么方法可以从该位置开始并在数据包末尾之前的 4 个字节处结束吗? packet 是一个指向 u_char 的指针(如果有帮助的话)。

我是一名新的 C 程序员,因此,如果您能给我有关我的代码的任何建议,我将不胜感激。谢谢!

最佳答案

您的frame_body只是一个指向帧开头的指针,指向数据所在的现有缓冲区。

没关系,您可以将其与 frame_body_len 一起传递,让所有关心数据的人只检查从 frame_body 开始的数据,而不关心关于 frame_body_len 之外的任何事情 - 这是你无论如何都必须做的。

因此,您实际上并不需要一个不包含尾随校验和的 frame_body

如果您确实需要这样的缓冲区,例如动态分配,您必须为数据腾出空间,并将数据复制到那里:

u_char *frame_body = malloc(frame_body_len);
if(frame_body == NULL) {
//deal with error
}

memcpy(frame_body,&packet[radio_hdr->len + wifi_hdr_len],frame_body_len );

关于仅根据现有 u_char 的一部分在 C 中创建新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3048309/

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