#include <iostream>
typedef unsigned char byte;
#define SYSTEMBYTEORDER 0x3210
#define SOMESHITTYBYTEORDER 0x0123
#define YETANOTHERBYTEORDER 0x1032
template < int b0, int b1, int b2, int b3, int b4 = b0 + 4, int b5 = b1 + 4, int b6 = b2 + 4, int b7 = b3 + 4 >
struct ByteOrder {
static int GetInt ( int arf ) {
byte* b = (byte*)&arf;
return b[b0] | ( b[b1] << 8 ) | ( b[b2] << 16 ) | ( b[b3] << 24 );
}
};
template <int order>
struct HexByteOrder :
public ByteOrder< (order & 0xF), ((order & 0xF0) >> 4), ((order & 0xF00) >> 8), ((order & 0xF000) >> 12) >
{};
int main (int argc, char* argv[]) {
std::cout << std::hex;
std::cout << "Argc before: " << argc << std::endl;
std::cout << "Argc with SOMESHITTYBYTEORDER: " << HexByteOrder<SOMESHITTYBYTEORDER>::GetInt( argc ) << std::endl;
std::cout << "Argc with YETANOTHERBYTEORDER: " << HexByteOrder<YETANOTHERBYTEORDER>::GetInt( argc ) << std::endl;
std::cout << "Argc with SYSTEMBYTEORDER: " << HexByteOrder<SYSTEMBYTEORDER>::GetInt( argc ) << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGJ5dGU7CgojZGVmaW5lIFNZU1RFTUJZVEVPUkRFUiAweDMyMTAKI2RlZmluZSBTT01FU0hJVFRZQllURU9SREVSIDB4MDEyMwojZGVmaW5lIFlFVEFOT1RIRVJCWVRFT1JERVIgMHgxMDMyCgp0ZW1wbGF0ZSA8IGludCBiMCwgaW50IGIxLCBpbnQgYjIsIGludCBiMywgaW50IGI0ID0gYjAgKyA0LCBpbnQgYjUgPSBiMSArIDQsIGludCBiNiA9IGIyICsgNCwgaW50IGI3ID0gYjMgKyA0ID4Kc3RydWN0IEJ5dGVPcmRlciB7CiAgICAKICAgIHN0YXRpYyBpbnQgR2V0SW50ICggaW50IGFyZiApIHsKICAgICAgICBieXRlKiBiID0gKGJ5dGUqKSZhcmY7CiAgICAgICAgcmV0dXJuIGJbYjBdIHwgKCBiW2IxXSA8PCA4ICkgfCAoIGJbYjJdIDw8IDE2ICkgfCAoIGJbYjNdIDw8IDI0ICk7CiAgICB9CiAgICAKfTsKCnRlbXBsYXRlIDxpbnQgb3JkZXI+CnN0cnVjdCBIZXhCeXRlT3JkZXIgOgpwdWJsaWMgQnl0ZU9yZGVyPCAob3JkZXIgJiAweEYpLCAoKG9yZGVyICYgMHhGMCkgPj4gNCksICgob3JkZXIgJiAweEYwMCkgPj4gOCksICgob3JkZXIgJiAweEYwMDApID4+IDEyKSA+IAp7fTsKCmludCBtYWluIChpbnQgYXJnYywgY2hhciogYXJndltdKSB7CiAgICAKICAgIHN0ZDo6Y291dCA8PCBzdGQ6OmhleDsKICAgIHN0ZDo6Y291dCA8PCAiQXJnYyBiZWZvcmU6ICIgPDwgYXJnYyA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OmNvdXQgPDwgIkFyZ2Mgd2l0aCBTT01FU0hJVFRZQllURU9SREVSOiAiIDw8IEhleEJ5dGVPcmRlcjxTT01FU0hJVFRZQllURU9SREVSPjo6R2V0SW50KCBhcmdjICkgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8ICJBcmdjIHdpdGggWUVUQU5PVEhFUkJZVEVPUkRFUjogIiA8PCBIZXhCeXRlT3JkZXI8WUVUQU5PVEhFUkJZVEVPUkRFUj46OkdldEludCggYXJnYyApIDw8IHN0ZDo6ZW5kbDsKICAgIHN0ZDo6Y291dCA8PCAiQXJnYyB3aXRoIFNZU1RFTUJZVEVPUkRFUjogIiA8PCBIZXhCeXRlT3JkZXI8U1lTVEVNQllURU9SREVSPjo6R2V0SW50KCBhcmdjICkgPDwgc3RkOjplbmRsOwogICAgCn0=