Как вы преобразуете структуру в массив символов? - PullRequest
2 голосов
/ 03 апреля 2012

Я немного запутался в том, как преобразовать структуру в символ [] в C.

Мой модем CDMA не поддерживает отправку переменных - он понимает только символы ASCII.Мне нужно выполнить операцию преобразования.

Допустим, у меня есть структура sMSG, подобная этой:

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

Итак, я должен создать строку типа char str[] = "sMSG_converted_into_ASCII_chars";

Мне интересно, поможет ли кто-нибудь мне в этом, пожалуйста.

Заранее спасибо.

1 Ответ

5 голосов
/ 03 апреля 2012

Сначала вам нужно скопировать данные структуры в байтовый массив

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);
...