Буфер содержит только необработанное изображение того, что вы прочитали поверх
сеть. Вам придется конвертировать байты в буфере во что угодно
формат вы хотите. Строка проста:
std::string s(buffer + sOffset, 4);
(Предполагая, конечно, что внутренняя кодировка символов одинакова
как в файле & mdash; возможно, расширение ASCII.)
Остальные являются более сложными и зависят от формата
внешние данные. Из описания шапки я собираюсь чем то
целые числа - четыре байта, но это ничего не говорит мне о
их представление. В зависимости от случая, либо:
int getInt(unsigned char* buffer, int offset)
{
return (buffer[offset ] << 24)
| (buffer[offset + 1] << 16)
| (buffer[offset + 2] << 8)
| (buffer[offset + 3] );
}
или
int getInt(unsigned char* buffer, int offset)
{
return (buffer[offset + 3] << 24)
| (buffer[offset + 2] << 16)
| (buffer[offset + 1] << 8)
| (buffer[offset ] );
}
, вероятно, добьется цели. (Другие четырехбайтовые представления
целые числа возможны, но они чрезвычайно редки. Точно так же
преобразование неподписанных результатов сдвигов и или в int
реализация определена, но на практике вышесказанное будет работать
везде.)
Единственный совет, который вы даете в отношении представления поплавков,
формат сообщения: 32 байта, минус 4 байта, оставьте 28 байтов для
5 поплавков; но 28 не входит в пять, так что я не могу даже догадываться о
длина поплавков (за исключением того, что там должны быть некоторые отступы)
где-то). Но преобразование с плавающей точкой может быть более или менее
сложный, если внешний формат не совсем как внутренний
формат.