gpt4 book ai didi

c - 用字节和字符串文字初始化 C 数组

转载 作者:太空宇宙 更新时间:2023-11-03 23:25:14 24 4
gpt4 key购买 nike

我想用一些字节值和一个字符串文字一次性初始化一个字节数组。本质上,数组是数据结构的序列化表示,如

struct foo {
uint8 param1;
uint8 stringLen;
const char * string;
uint8 param2;
};

尽管 API 需要字节数组,但我无法控制它。 API 期望数组为 sizeof 运算符静态初始化以报告实际大小。我知道可以使用字符串文字或特定字节初始化数组,尽管任何尝试初始化数组的尝试都以字符串文字作为指针地址而告终(它是什么,这并不奇怪)。

我正在考虑定义我自己的 struct 并用它初始化数组,但我不相信结构甚至字符串文字是编译时可序列化的。我似乎无法想到这样的语法,甚至不确定这是否可能。任何意见表示赞赏。

最后的手段可能是用 array[] = "\x66oo" 之类的东西初始化数组,但这只会比简单的 array[] = {0x66, 'o', 'o'},这两种解决方案都需要外部(python?)生成器。

最佳答案

您必须使用如下函数初始化字节数组:

uint8 *initByteArray(const struct foo *foo)
{
unsigned slen = foo->string ? strlen(foo->string) : 0;
assert(slen <= 255);
uint8 *array = malloc(slen + 3);
unsigned i = 0;
array[i++] = foo->param1;
array[i++] = (uint8)slen;
if (slen) {
strncpy(&array[i], foo->string, slen);
i += slen;
}
array[i++] = foo->param2;
return array;
}

如果 struct 包含任何长度大于 1 的整数(即 uint16 等),那么您还需要在编码期间考虑它们的字节顺序。

关于c - 用字节和字符串文字初始化 C 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28830330/

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