Re[2]: Как перевести структуру в строковый буфер
От: Вов и К  
Дата: 14.04.05 13:29
Оценка:
Здравствуйте, ZeusSon, Вы писали:

ZS>Здравствуйте, Вов и К, Вы писали:


ВИК>>У меня имелось несколько int и float переменных, которые я записывал в символьный массив примерно так:

ВИК>> char Msg[256];
ВИК>> sprintf(Msg, "%d %d %f %f",
ВИК>> m_nTemp1, m_nTemp2, m_fTemp3, m_fTemp4);
ВИК>>Теперь мне надо эти и еще несколько переменных и массивов запихнуть в структуру.
ВИК>>ВОПРОС: как полученную структуру перевести в символьный массив char Msg[256]?

ZS>Ответы:

ZS>1. Если необходимо выводить в строку значения используй такой же финт и для каждого из полей структуры. Тут других вариантов нету.
ZS>2. Если необходимо просто хранить структуру в строке (как области памяти), то просто заполняешь структуру, а потом: struct _Struct {int a;} _s;
ZS>_s.a = 10;
ZS>...
ZS>char* _str = &_s;

ZS>Опиши более подробно твою ситуацию — может помогу.


ОК. Попытаюсь объяснить поподробнее.

Два хоста соединены по Ethernet. С одного на другой надо передать набор данных.
Было реализовано примерно так.

 
char Msg[256];  
sprintf(Msg, "%d %d %f %f", Temp1, Temp2, Temp3, Temp4);


Это накладывает определенные ограничения на порядок чтения. Т.е. sscanf(...) на приемнике надо выполнять в том же порядке. А параметров в функции у меня сейчас скопилось довольно много. Вот и хотелось бы сделать структуру примерно такую:

struct foo
{
int Temp1;
int Temp2;
double Temp3;
double Temp4;
char Temp5[10];
...
}

Потом присвоить элементам какие-то значения и вывести всю область памяти, занимаемую структурой в строковый поток.
Далее на приемном хосте произвести обратную операцию извлечения из строкового потока в структуру и работать дальше с принятыми данными.

(Проблема передачи по сети не рассматривается. Главное требование буфер для приема-передачи должен быть char)

Как я понимаю, у меня проблема именно в конвертации структуры в строковый поток и последующей правильной обратной операцией на приемном хосте.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.