Ответ 1
std::ios::binary
promises, чтобы не делать преобразования строк в потоке (и некоторые другие небольшие поведенческие различия с текстовыми потоками).
Вы можете посмотреть
- Boost Serialization http://www.boost.org/doc/libs/1_53_0/libs/serialization/doc/index.html
- Двоичные генераторы Boost Spirit http://www.boost.org/doc/libs/1_53_0/libs/spirit/doc/html/spirit/karma/reference/binary/
- Использование метода stream:: write (...) для ручной записи байтов
Вот пример использования Boost Spirit Karma (при условии упорядочения байтов Big-Endian):
#include <boost/spirit/include/karma.hpp>
namespace karma = boost::spirit::karma;
int main()
{
int i = 10;
char c = 'c';
float f = 30.40f;
std::ostringstream oss(std::ios::binary);
oss << karma::format(
karma::big_dword << karma::big_word << karma::big_bin_float,
i, c, f);
for (auto ch : oss.str())
std::cout << std::hex << "0x" << (int) (unsigned char) ch << " ";
std::cout << "\n";
}
Отпечатает
0x0 0x0 0x0 0xa 0x0 0x63 0x41 0xf3 0x33 0x33