c - 如何将结构体转换为字符数组?

标签 c serialization embedded char cdma

我对如何在 C 中将结构转换为 char[] 有点困惑。

我的 CDMA 调制解调器不支持发送变量 - 它只理解 ASCII 字符。我需要进行转换操作。

假设我有一个像这样的 sMSG 结构:

struct sMSG
{
    int a;
    int b[];
    char c[];
    double d;
    float f;
};

所以,我必须创建一个像 char str[] = "sMSG_converted_into_ASCII_chars";

这样的字符串

我想知道是否有人能帮我解决这个问题。

提前致谢。

最佳答案

首先需要将结构体的数据复制到字节数组中

int len = sizeof(struct sMSG);
unsigned char * raw = malloc(len);
memcpy(raw, &msg, len);

现在使用函数将字节数组转换为 Base64 文本或十六进制表示形式(2 个字符/字节)。由于您使用嵌入标记,因此后者可能是最容易实现的。

#define TOHEX(x) (x > 9 ? (x - 10 + 'A') : (x + '0'));
char * text = malloc(2 * len + 1);
for (int i = 0; i < len; i++)
{
    text[2 * i + 0] = TOHEX(raw[i] >> 4);
    text[2 * i + 1] = TOHEX(raw[i] & 0xF);
}
text[2 * len] = '\0';

free(raw);
free(text);

关于c - 如何将结构体转换为字符数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9990308/

相关文章:

c - sched_yield 在这种情况下做了什么?

c - Visual Studio 2010 C 项目 - 作为服务安装

python - 如何在 Python 中获取 JSON 格式的持久规则?

C - 将指针传递给字节

c - STM32L476 flash 页删除无效

c - 带有 Cmake 的 arm-none-eabi-gcc 没有带有标志 -nostdlib 的入口点

创建自己的 Web 服务器时无法连接到本地主机

ruby - 多级关联的数据库对象到 YAML

Python 序列化 - 为什么pickle?

embedded - Ada 中的信号量