gpt4 book ai didi

c - 如何从字节数组中获取数据

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

关于任务的一般信息:

我需要用 C 语言 编写函数,它接受一个字节数组(它代表包)解析它,做一些事情并返回一个改变的字节数组。

我的方法:

"filename.h"
char* ParsePackage(const char* byteArray);
typedef struct
{
char name[4];
float value;
} packageStructure;

我使用将 byteArray 转换到的结构 packageStructure,然后我试图通过访问该结构的字段来获取数据:“文件名.cpp”

include "filename.cpp"
char* ParsePackage(const char* byteArray)
{
packageStructure* tmp = (packageStructure*) byteArray;
// get values of structure fields and do some staff with them:
tmp->name;
tmp->value;
return (char*)modifiedByteArray;
}

对结果不满意,因为字节数组中的全部数据被写入结构的第一个字段,这是一个名称,第二个字段是一些随机值;

这里预期的问题是:我做错了(如何改变我的方法以使其发挥作用)?你能提供其他解析字节数组的方法吗?

提前致谢!

最佳答案

我猜 "tex" 应该是名称,123 应该是值。但是,正如您所见,它不是那样工作的,尤其是对于浮点值。不能仅通过强制转换将字符串中的数字转换为浮点值。

相反,您必须从字符串中提取前三个字符并放入 name,然后您必须提取接下来的三个字符并作为字符串使用,例如strtof将字符串转换为 float 。

再次创建字符串时,可以使用snprintf为此。

你必须做这样的事情:

char* ParsePackage(char* byteArray)
{
packageStructure tmp;

/* Extract values from string, first the name */
memcpy(tmp.name, byteArray, sizeof(tmp.name) - 1);
tmp.name[sizeof(tmp.name) - 1] = '\0'; /* Make sure it's terminated */

/* Then the value */
tmp.value = strtof(&byteArray[3], NULL);

/* Now do whatever you need to do with the structure... */

/* Convert back to a string */
/* For that we need a string */
static char output[16];

/* Then put the data from the structure into the string */
snprintf(output, sizeof(output), "%s%3.0f", tmp.name, tmp.value);

/* Return the string */
return output;
}

但是,与其自己做这项工作,您还应该为 serialization 找一个库。 ,它将为您处理所有血淋淋的细节。

关于c - 如何从字节数组中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12778318/

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