2

Cで構造体をchar []に変換する方法について少し混乱しています。

私の CDMA モデムは変数の送信をサポートしていません。ASCII 文字しか理解できません。変換操作を行う必要があります。

次のような sMSG 構造体があるとします。

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

だから、私は次のような文字列を作る必要がありますchar str[] = "sMSG_converted_into_ASCII_chars";

誰かがこれについて私を助けてくれるかどうか疑問に思っています.

前もって感謝します。

4

1 に答える 1

5

まず、構造体のデータをバイト配列にコピーする必要があります

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

関数を使用して、バイト配列を Base64 テキストまたは 16 進数表現 (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);
于 2012-04-03T09:21:29.490 に答える