Здравствуйте, Вов и К, Вы писали:
ВИК>У меня имелось несколько int и float переменных, которые я записывал в символьный массив примерно так:
ВИК> char Msg[256];
ВИК> sprintf(Msg, "%d %d %f %f",
ВИК> m_nTemp1, m_nTemp2, m_fTemp3, m_fTemp4);
ВИК>Теперь мне надо эти и еще несколько переменных и массивов запихнуть в структуру.
ВИК>ВОПРОС: как полученную структуру перевести в символьный массив char Msg[256]?
В С++ для этих целей пользуются
(1) перегрузкой функций...
Например, для вывода в любой текстовый поток общепринято завести семейство операторов <<
std::ostream& operator<< (std::ostream& ostr, const YourType& t);
тогда вывод структуры можно рекурсивно определить через вывод её полей
struct Foo
{
int x;
double y;
Bar z; // ещё какая-то структура
Buz t[10]; // и даже массив
};
inline std::ostream& operator<< (std::ostream& ostr, const Foo& foo)
{
ostr << "{ ";
ostr << x << " " << y << " " << z << " "; // предполагаем, что такой оператор есть и для Bar
std::copy(t,t+10, std::ostream_iterator<Buz>(ostr, " ")); // маленькая хитрость - копирование массива в поток
// превращается внутри в ostr << t[0] << " " << t[1] << " " ...
ostr << "}";
return ostr;
}
(2) и полиморфными объектами
Если ты решился делать всё через потоки (благо, для них уже много чего имеется в STL), обрати внимание: всё семейство operator<< принимает слева ostream. Это базовый класс, наследники которого — файловые и консольные потоки, но не только. Один из них — ostringstream — всё выводимое коллекционирует в строку.
Foo foo;
std::ostringstream oss;
oss << foo;
std::string s = oss.str();