einzelne bytes eines doubles
-
hi,
ich hoffe jemand kann mir helfen, mein Problem;
ich muss an die 8 bytes einer double Var. ran kommen, bzw. wie kann man das umrechnen.
z.B. 12,345 => 71 3d 0a d7 a3 b0 28 40
ich hoffe es gibt eine einfache möglichkeit (mit nicht so viel rechnen)
-
Dazu musst Du wissen ob Du an einem little endian (z.B. PC) oder big-endian (z.B. Apple) sitzt. Ansonsten geht sowas:
[cpp]
#include <stdio.h>int main(void)
{
int i;
double d = 12345.678;
char* c;c = (char*) &d;
for( i=0; i < sizeof(d); ++i)
{
printf("Stelle %d: %d\n", i, *(c+i));
}return 0;
}
[/code]
-
wow, die Antwort kam schnell.
Stimmt, einfach mit nem zeiger durch die Variable durchlaufen, dass ich da nicht selber drauf gekommen bin
hab' nur noch ne maske hinzugefügt damit nur die 2 niedrigsten bytes genommen werden, sonst können negative Werte vorkommen, die es aber nicht geben darf.
Stelle 0: 58
Stelle 1: 39
Stelle 2: ffffffb4 => b4
Stelle 3: ffffffc8 => c8
Stelle 4: ffffffd6 => d6
Stelle 5: 1c
Stelle 6: ffffffc8 => c8
Stelle 7: 40[cpp]
#include <stdio.h>int main(void)
{
int i;
double d = 12345.678;
char* c;c = (char*) &d;
for( i=0; i < sizeof(d); ++i)
{
printf("Stelle %d: %02x\n", i, ((*(c+i)) & 0x00FF));
}return 0;
}
[/cpp]Trotzdem, nochmals vielen, vielen Dank!
-
phil2 schrieb:
hab' nur noch ne maske hinzugefügt damit nur die 2 niedrigsten bytes genommen werden, sonst können negative Werte vorkommen, die es aber nicht geben darf.
mach aus dem 'char *c' einen 'unsigned char *c'. bestimmt kannste dann auf das '& 0xff' verzichten...