- Giant is a tiny C++11 library to handle little/big endianness.
- Giant is safe. Converts POD types only. Non-POD types are returned as-is.
- Giant is tiny. Header-only library.
- Giant is cross-platform. Compiles under MSVC/GCC. Works on Windows/Linux.
- Giant has no dependencies.
- Giant is zlib/libpng licensed.
const bool giant::is_little
const bool giant::is_big
T giant::swap(T)
T giant::letobe(T)
T giant::betole(T)
T giant::htobe(T)
T giant::htole(T)
T giant::betoh(T)
T giant::letoh(T)
~giant>
~giant> cat sample.cc
#include <iostream>
#include <stdint.h>
#include <string>
#include "giant.hpp"
int main() {
// sample
uint16_t u16 = 0x1234;
uint32_t u32 = 0x12345678;
uint64_t u64 = 0x123456789ABCDEF0;
uint16_t u16sw = giant::swap( u16 );
uint32_t u32sw = giant::swap( u32 );
uint64_t u64sw = giant::swap( u64 );
std::cout << std::hex;
std::cout << "Target is " << ( giant::is_little ? "little endian" : "big endian") << std::endl;
// checks
assert( giant::swap(u16sw) == u16 );
assert( giant::swap(u32sw) == u32 );
assert( giant::swap(u64sw) == u64 );
if( giant::is_little )
assert( giant::htole('unix') == 'unix' && giant::htobe('unix') == 'xinu' );
else
assert( giant::htobe('unix') == 'unix' && giant::htole('unix') == 'xinu' );
// show conversions
std::cout << "big to host: " << giant::betoh(u64) << std::endl;
std::cout << "little to host: " << giant::letoh(u64) << std::endl;
std::cout << "host to big: " << giant::htobe(u64) << std::endl;
std::cout << "host to little: " << giant::htole(u64) << std::endl;
// non-pod types wont get swapped neither converted
assert( giant::swap( std::string("hello world") ) == "hello world" );
assert( giant::letobe( std::string("hello world") ) == "hello world" );
return 0;
}
~giant>
~giant> g++ sample.cc && ./a.out
Target is little endian
big to host: f0debc9a78563412
little to host: 123456789abcdef0
host to big: f0debc9a78563412
host to little: 123456789abcdef0
~giant>