gpt4 book ai didi

c - 处理数据缓冲区中的 header

转载 作者:太空宇宙 更新时间:2023-11-04 03:37:11 26 4
gpt4 key购买 nike

我有一个包含以下内容的数据缓冲区:

00000000    20 7F 3E 15 38 34 37 2E 38 33 33 36 38 32 20 2F
00000010 20 31 33 2E 30 30 35 34 31 39 20 3E 20 20 20 20
00000020 20 3E 20 4E 4F 20 47 50 53 20 44 41 54 41 20 20
00000030 20 20 20 20 20 20 20 20 20 20 20 20

现在我想使用“真实”数据在另一个函数中处理它。

“真实”数据是前 5 个字节之后的所有内容。第五个字节,在此示例中为 0x38,是数据长度。我现在如何扫描缓冲区中的 header 0x20 0x7F 0x3E 0x15 和数据长度字节并将实际数据内容移动到另一个缓冲区或者更好,将当前缓冲区剥离为仅数据内容?

注意:我不能动态分配内存。缓冲区大小始终为 60 字节(包括 header )。

谢谢!

最佳答案

假设原始缓冲区包含至少 5 个字节:

#define CAPACITY UINT8_MAX
uint8_t buf[CAPACITY], newbuf[CAPACITY - 5];
...
int header_is_ok =
(buf[0] == 0x20 && buf[1] == 0x7F && buf[2] == 0x3E && buf[3] == 0x15);

if (header_is_ok) {
uint8_t length = buf[4];

if (length > 0 && length < CAPACITY - 5) {
uint8_t *contents = buf + 5;
memcpy(newbuf, contents, length);
}
}

一旦内容的开头和长度已知,memcpy 会将缓冲区移动到另一个位置。

关于c - 处理数据缓冲区中的 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31696014/

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