C
ermmm...
1. 0x5C 0x50 in ein int umwandel ist keine gute idee, da ein int bei dir höchst warscheinlich 4 byte sind, nimm lieber ein short oder __int16
2. Wenn in deinem memory-dump ... 0x5C 0x50 ... steht und das ganze 0x505c sein soll brauchst doch gar nix umzuwandlen
Intel, AMD & co. == Little Endian CPUs, die speichern die zahlen verkehrt rum, mein template bräuchtest du also nur auf nem MAC (Big Endian CPUs), auf nem PC ist so was genug:
// im buffer steht 0x5C, 0x50
unsigned char buffer[] = {0x5C, 0x50 };
// steck das ganze in ein short
short *s = (short*)test;
// in *s steht nun 0x505C
und damit wir das ganze Platform unabhängig haben, erweitern wir das template:
template<class datatype>
datatype read_in(unsigned char *pBuffer)
{
#ifdef _PC
datatype *result = (datatype*)pBuffer;
return *result;
#else
#ifdef _MAC
datatype result;
unsigned char *pVal = (unsigned char*)&result+sizeof(datatype);
for(int i=0;i<sizeof(datatype);i++)
*--pVal = *(pBuffer+i);
return result;
#else
#error "No CPU-Type defined! (define _PC or _MAC)"
#endif // _MAC
#endif // _PC
}
jetzt musst nur mehr _MAC oder _PC definieren und kannst immer über dieses template lesen, egal auf welchen syste, du grad bist