如何将结构转换为char数组?

2 c embedded serialization char cdma

关于如何在C中将结构转换为char [],我有点困惑.

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

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

struct sMSG
{
    int a;
    int b[];
    char c[];
    double d;
    float f;
};
Run Code Online (Sandbox Code Playgroud)

所以,我必须做一个字符串 char str[] = "sMSG_converted_into_ASCII_chars";

我想知道是否有人会帮我解决这个问题.

提前致谢.

huy*_*itw 5

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

int len = sizeof(struct sMSG);
unsigned char * raw = malloc(len);
memcpy(raw, &msg, len);
Run Code Online (Sandbox Code Playgroud)

现在使用函数将字节数组转换为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);
Run Code Online (Sandbox Code Playgroud)

  • 这个"正常工作"是否真的取决于谁向他们"发送"消息,不同数据类型的大小,字节序等等.你不能只是在另一台机器上读取它并"回忆"它进入正确的结构. (3认同)