, . , . , , , endianness , .
++:
#include <iostream>
#include <cstring>
using namespace std;
long long getLongLong( unsigned char * ca, bool differentEndian )
{
long long retVal;
if (differentEndian)
{
for (int i = 0; i < 4; i++)
{
unsigned char _tmpCh = ca[i];
ca[i] = ca[7-i];
ca[7-i] = _tmpCh;
}
}
retVal = *reinterpret_cast<unsigned long long *>(ca);
return retVal;
}
int main()
{
unsigned char cArray[] = {0xff, 0x1, 0x70, 0x2, 0x61, 0x3, 0x52, 0x4};
unsigned long long ll = getLongLong( cArray, false );
cout << "Result for same endian: " << hex << ll << " or " << dec << ll << endl;
ll = getLongLong( cArray, true );
cout << "Result for different endian: " << hex << ll << " or " << dec << ll << endl;
return 0;
}
#include <stdio.h>
#include <string.h>
long long getLongLong( unsigned char * ca, int differentEndian )
{
long long retVal;
if (differentEndian)
{
int i;
for (i = 0; i < 4; i++)
{
unsigned char _tmpCh = ca[i];
ca[i] = ca[7-i];
ca[7-i] = _tmpCh;
}
}
memcpy( &retVal, ca, sizeof(long long));
return retVal;
}
int main()
{
unsigned char cArray[] = {0xff, 0x1, 0x70, 0x2, 0x61, 0x3, 0x52, 0x4};
unsigned long long ll = getLongLong( cArray, 0 );
printf("Result for same endian: %llx or %llu\n", ll, ll);
ll = getLongLong( cArray, 1 );
printf("Result for different endian: %llx or %llu\n", ll, ll);
return 0;
}
:
Result for same endian: 4520361027001ff or 311315039429591551
Result for different endian: ff01700261035204 or 1837509111016818739