PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Integer oder Floats in Bytes auftrennen



ElchiMtr
29.05.2013, 20:34
Hallo Freunde,

ich zerbreche mir jetzt schon die ganze Woche den Kopf wie ich eine Integervariable in Bytes(char) zerlegen kann und später wieder zusammenbauen das Ganze sollte wenn möglich auch für floats gehen.

Ich hab schon gegooglt und auch hier gesucht, aber entweder stelle ich mich zu doof an oder finde nix das passt.
Ich hätte auch ein paar Ideeen, aber ich möchte euch nicht auf einen festen Weg bringen.

Also habt ihr Ideen ?

Gruß Elchi

markusj
30.05.2013, 00:31
Du holst dir einen Pointer auf den Integer/Float, castest den Pointer um auf einen Byte-Pointer und inkrementierst den Pointer schrittweise, insgesamt sizeof(Datentyp) - 1 Mal. Bei jedem Schritt kannst du den Pointer dereferenzieren und erhältst damit das entsprechende Byte.

mfG
Markus

seite5
30.05.2013, 00:35
hi,
in C vermute ich.
Welches int-format (16bit/32bit in PC-C# gibts auch 64bit integer) ?
16bit: union aus byte und int, byte ist dann direkt msb, lsb ist union.int >> 8;
32bit (in meinem C unsigned long): union aus 3byte und u_long, bytes w.o.
Was soll bei der Zerlegung eines float in bytes rauskommen - die einzelne digits oder was ?
mfg
Achim

ichbinsisyphos
30.05.2013, 01:01
Üblicherweise meinen die Leute hier bei "zerlegen in bytes", das aufspalten in Ziffern. Bei Integern gibts die Möglichkeit /10 und %10 zu benutzen, aber das geht bei Gleitkommazahlen nicht, deswegen könnt man gleich in Strings umwandeln und die Ziffern byteweise als chars rausholen.

ElchiMtr
30.05.2013, 09:44
Hallo,

Ziel ist es Daten die als einzelne Bytes über rs232 oder einen soket an kommen zusammen zu setzten oder die Antwort wieder in einzelne Bytes aufzutrennen. Die Bytes einzeln haben natürlich keinen nutzen ohne das sie wieder verbunden werden. Die pointer Idee werde ich mal testen und zur Diskussion stellen.

Klebwax
30.05.2013, 10:24
Hallo,

Ziel ist es Daten die als einzelne Bytes über rs232 oder einen soket an kommen zusammen zu setzten oder die Antwort wieder in einzelne Bytes aufzutrennen. Die Bytes einzeln haben natürlich keinen nutzen ohne das sie wieder verbunden werden. Die pointer Idee werde ich mal testen und zur Diskussion stellen.

Da muß man aber berücksichtigen, daß nicht alle Prozessoren die Daten auf die gleiche Weise abspeichern. Stichworte sind da Big/Little Endian, verschiedene Floating Point Formate sowie Network Byte Order. Außerdem sind ints nicht auf allen Archtekturen gleich groß, so von 16 bis 64 Bit.

MfG Klebwax

ElchiMtr
30.05.2013, 20:52
Das mit den Piontern hat als ichs richtig gemacht hatte prima. Die Sache mir den Endians weiß ich und habe ich berücksichtigt.
Danke für die Hilfe