#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

template<typename T>
void printHex(T num)
{
	const unsigned int size = sizeof(T);
	for(int i = size - 1; i >= 0; --i)
	{
		printf("%+02X ", (num >> i * 8) & 0xFF);
	}
	printf("\n\n");
}

template<typename T>
T convertToIntN(char* buf)
{
	T tmp;
	const unsigned int size = sizeof(T);
	reverse(buf, buf + size);
	memcpy(&tmp, buf, size);

	return tmp;
}

int main() {
				/*MSB                                                     LSB*/
				/* 0       1       2       3       4       5       6       7 */
	char s1[8]={'\x00', '\x00', '\x00', '\x6a', '\x46', '\xd2', '\xdf', '\x44'};
	char s2[8]={'\xFF', '\xFF', '\xFF', '\x96', '\xBA', '\x2E', '\x21', '\xBC'};
	uint64_t i1 = convertToIntN<uint64_t>(s1);
	int64_t i2 = convertToIntN<int64_t>(s2);

	printf("%llu\n", i1);
	printHex(i1);

	printf("%lld\n", i2);
	printHex(i2);
	
	return 0;
}