IEEE-32Bit in Hexzahl umwandeln
-
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); }