Verdrehte Bytes mit fread
-
http://de.wikipedia.org/wiki/Byte-Reihenfolge
musst du entweder selber umdrehen oder mal nach "htonl" / "ntohl" suchen.
-
Hallo,
Habe es nun so gelöst:#include <stdint.h> // uint64_t #include <winsock.h> // ntohl uint64_t big2little(uint64_t i){ return i = (ntohl(i)*0x100000000ULL)+ntohl(i >>= 32); }
konvertiert zwischen den Endians hin und her, für 64bit Integer.
Hab mir ne ganze weile überlegt wie ich die Bytes selber drehen könnte, bin aber nicht so recht drauf gekommen. Hat da jemand eventuell ein Tipp?
-
-
omg
#include <stdint.h> // uint64_t #include <winsock.h> // ntohl uint64_t big2little(uint64_t i) { return (ntohl(i & 0xFFFFFFFF) << 32) | ntohl(i >> 32); }
deine >>= und "return i =" sind irgendwie nutzlos. und die multiplikation haettest du auch als shift machen koennen. die addition hab ich mit nem bitweisen OR geloest.
-
c.rackwitz schrieb:
ntohl(i & 0xFFFFFFFF) << 32
der rückgabewert von ntohl ist 32 bittig. damit shifteste den zu 0
insofern war die multiplikation von vorher doch nicht so schlecht
-
net schrieb:
c.rackwitz schrieb:
ntohl(i & 0xFFFFFFFF) << 32
der rückgabewert von ntohl ist 32 bittig. damit shifteste den zu 0
Schlimmer noch: Das Verhalten ist undefiniert.
-
so könnt's gehen
return ((uint64_t)ntohl(i))<<32 | ntohl(i>>32);
-
wenn man sich erstmal an beliebig breite/genaue datentypen gewoehnt hat, muss man erstmal umdenken
-
Der Code von net geht übrigends hervorragend
Wo gibts denn "belibig breite" datentypen?
-
in anderen sprachen :p
-
c.rackwitz schrieb:
in anderen sprachen :p
hauptsächlich genutzt von beliebig breiten Programmierern.