Я могу написать свой собственный: Только будьте осторожны!
enum
{
O32_LITTLE_ENDIAN = 0x03020100ul,
O32_BIG_ENDIAN = 0x00010203ul,
O32_PDP_ENDIAN = 0x01000302ul
};
static const union { unsigned char bytes[4]; uint32_t value; } o32_host_order =
{ { 0, 1, 2, 3 } };
#define O32_HOST_ORDER (o32_host_order.value)
template <class T> ostream & operator << ( ostream &os, const T &value )
{
size_t i = sizeof(T);
const char * val = "01";
const unsigned char * addr = reinterpret_cast<const unsigned char *>(&value);
// x86
#if ( O32_HOST_ORDER == O32_LITTLE_ENDIAN )
while ( i > 0 )
{
--i;
os << val[bool(addr[i] & 128)];
os << val[bool(addr[i] & 64)];
os << val[bool(addr[i] & 32)];
os << val[bool(addr[i] & 16)];
os << val[bool(addr[i] & 8)];
os << val[bool(addr[i] & 4)];
os << val[bool(addr[i] & 2)];
os << val[bool(addr[i] & 1)];
}
// PowerPC
#else
size_t j = 0;
while ( j < i )
{
os << val[bool(addr[j] & 128)];
os << val[bool(addr[j] & 64)];
os << val[bool(addr[j] & 32)];
os << val[bool(addr[j] & 16)];
os << val[bool(addr[j] & 8)];
os << val[bool(addr[j] & 4)];
os << val[bool(addr[j] & 2)];
os << val[bool(addr[j] & 1)];
++j;
}
#endif
return os;
}
Тестирование с прямым порядком байтов: ссылка .