IEEE-32Bit in Hexzahl umwandeln
-
void print_float_hex(float f) { unsigned char const *const ptr = (unsigned char*)&f; for(size_t i = 0; i < sizeof(f); ++i) printf("%02X", ptr[i]); }
-
Heinz Diecker schrieb:
wenn man 1.57 eingibt, soll 3FC8F5C3 herauskommen!
Das kommt bei Rüdigers Funktion nur heraus, wenn die Maschine BigEndian abspeichert! (bei X86 voher bswap benutzen).
-
float f = 1.57; printf("0x%X\n",*((int*)(&f)));
oder
union un_test { int i; float f; }; int main() { union un_test u; u.f = 1.57; printf("0x%X\n", u.i); return 0; }
-
rüdiger schrieb:
void print_float_hex(float f) { unsigned char const *const ptr = (unsigned char*)&f; for(size_t i = 0; i < sizeof(f); ++i) printf("%02X", ptr[i]); }
mit schleife? wie umständlich...
void print_float_as_hex (float f) { printf("%08lx\n", htonl(*(unsigned long*)&f)); }
-
Der Code von "jm" funktioniert prima! Hätte nicht gedacht, dass man das so kurz schreiben kann! Gibt es nun auch noch eine Funktion, welche die Reihenfolge etwas umordnet, oder muss ich diese per Hand (was ja kein Thema wäre) schreiben:
Aus 0x3FC8F5C3 soll 0xC3F5C83F werden!
-
Heinz Diecker schrieb:
Gibt es nun auch noch eine Funktion, welche die Reihenfolge etwas umordnet
-
Wie kann ich einen Hex-String Array in eine Float-Zahl umwandeln?
(so wie hier: http://babbage.cs.qc.edu/IEEE-754/32bit.html)
Beispiel: 3EB2FA2F >> ~ 0.349564
-
Heinz Diecker schrieb:
@byteorder-freak: Wo finde ich die Library inet.h
hier ist z.b. ein htonl() --> http://fxr.watson.org/fxr/source/lib/libkern/htonl.c?v=NETBSD20
Heinz Diecker schrieb:
--> ich programmiere nur in C (nicht c++) unter Windows.
ja? und? ist doch gut so.
-
Heinz Diecker schrieb:
Hallo Leute,
wie kann ich eine IEEE-32Bit Zahl in eine Hexzahl umwandeln?
(http://de.wikipedia.org/wiki/IEEE_754)
Es soll quasi die binäre Darstellungsform der IEEE-32Bit Zahl in Hexwerten angezeigt werden.
Vielen Dankwas nützt dir deine hexzahl, wenn deine floatzahl > 2^32 -1 ist ?
nicht einmal mit 2^64-1 auf einer 64 bit maschine würdest du float damit reinpacken können.
-
mal so am rande schrieb:
was nützt dir deine hexzahl, wenn deine floatzahl > 2^32 -1 ist ?
nicht einmal mit 2^64-1 auf einer 64 bit maschine würdest du float damit reinpacken können.float hat nur 4 bytes, das ist doch harmlos.
-
hex-freak schrieb:
mal so am rande schrieb:
was nützt dir deine hexzahl, wenn deine floatzahl > 2^32 -1 ist ?
nicht einmal mit 2^64-1 auf einer 64 bit maschine würdest du float damit reinpacken können.float hat nur 4 bytes, das ist doch harmlos.
die größte floatzahl ist ca 3.40282*10^38
wie willst du die als hexzahl ausgeben ?
-
amrande schrieb:
die größte floatzahl ist ca 3.40282*10^38
wie willst du die als hexzahl ausgeben ?in ein float passen trotzdem nur max. 2^32 verschiedene zahlen. die bits werden nur anders interpretiert.
http://www.psc.edu/general/software/packages/ieee/ieee.html
-
ja, ok. irgendwie fehlt mir der bezug zum sinn. bezüglich dieser umwandlung.
-
Hi Leute,
die Lösung für das Hex to Dezimal - Problem habe ich gefunden:
char xtod(char c) { if (c>='0' && c<='9') return c-'0'; if (c>='A' && c<='F') return c-'A'+10; if (c>='a' && c<='f') return c-'a'+10; return c=0; // not Hex digit } int HextoDec(char *hex, int l) { if (*hex==0) return(l); return HextoDec(hex+1, l*16+xtod(*hex)); // hex+1? } int xstrtoi(char *hex) // hex string to integer { return HextoDec(hex,0); }
Wie kann ich einen Hex-String Array in eine Float-Zahl umwandeln?
(so wie hier: http://babbage.cs.qc.edu/IEEE-754/32bit.html)
Beispiel: 3EB2FA2F >> ~ 0.349564
-
Heinz Diecker schrieb:
die Lösung für das Hex to Dezimal - Problem habe ich gefunden:
char xtod(char c) { if (c>='0' && c<='9') return c-'0'; if (c>='A' && c<='F') return c-'A'+10; if (c>='a' && c<='f') return c-'a'+10; return c=0; // not Hex digit } int HextoDec(char *hex, int l) { if (*hex==0) return(l); return HextoDec(hex+1, l*16+xtod(*hex)); // hex+1? } int xstrtoi(char *hex) // hex string to integer { return HextoDec(hex,0); }
kannste mit einer funktion machen und ohne rekursion auch
int xstrtoi (char *hex) { int res = 0; for (;*hex; hex++) { char c = (*hex | 0x20) - '0'; if (c > 9) c -= 39; res = (res<<4) | c; } return res; }
-
Hey gut - danke!
Habe zum Hex to Float Problem auch folgende Lösung gefunden, allerdings ist diese noch nicht ganz zufriedenstellend, da ich ja nicht aus der Console einen Wert einlesen will, sondern den Wert aus einem unsigned Char Array nehmen will. Trotzdem hier schon mal der Code:
#include <stdio.h> void main() { float theFloat; scanf("%x", (int *) &theFloat); printf("0x%08X, %f\n", *(int *)&theFloat, theFloat); }
-
Ich habs!
#include <stdio.h> int main() { float theFloat; char test[8] = "3E9C89ED"; sscanf(test, "%x", (int *) &theFloat); printf("0x%08X, %f\n", *(int *)&theFloat, theFloat); }