gpt4 book ai didi

将 uint8_t 数组复制到结构

转载 作者:太空狗 更新时间:2023-10-29 15:49:55 26 4
gpt4 key购买 nike

我有这个数组

uint8_t *buffer = "JOHN:DOE:010119:M:FOO:BAR";

我想逐字段复制它到数据结构

typedef struct{
uint8_t firstName[5];
uint8_t pad1;
uint8_t lastName[4];
uint8_t pad2;
uint8_t dateOfBirth[7];
uint8_t pad3;
uint8_t genre;
uint8_t pad4;
uint8_t car[4];
uint8_t pad5;
uint8_t phone[4];
uint8_t pad6;
}DataStructTypeDef;

假设所有长度都是固定的(例如,firstName 始终由 4 个字符组成,lastName 始终由 3 个字符组成,等等...)

我使用了这种方法:

DataStructTypeDef foo;
memcpy((void *)&foo, (void *)buffer, sizeof(DataStructTypeDef));

当我尝试打印 dateOfBirth 时,它会像这样显示从 01012019 开始的整个数组

int main(void)
{
DataStructTypeDef foo;
memcpy((void *)&foo, (void *)buffer, sizeof(DataStructTypeDef));
printf("%s", foo.dateOfBirth); // It prints 010119:M:FOO:BAR
//printf("%s", foo.dateOfBirth); // Expected value 010119
return 0;
}

最佳答案

由于您正在复制的 char 数组 成员不是空终止的,printf("%s", 将不知道何时遇到每个字符串的结尾。

这可以在 printf 中通过限制打印的字符数量来控制...

例如:

printf("%.*s", (int)sizeof(foo.dateOfBirth), foo.dateOfBirth);

等价物是:

printf("%.6s", food.dateOfBirth);

.* 指定要打印的字符的“精度”。所以在你的例子中,dateOfBirth = precision/size 6.

关于将 uint8_t 数组复制到结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54310223/

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