2 chars zu short
-
Idee: Du könntest die Funktion htons nutzen. Diese sollte auf allen POSIX-System vorhanden sein und konvertiert die Eingabe in die sogenannte Network-Order (Big-Endian).
-
@SeppJ:
Aber wenn ich jetzt doch ein Big-Endian System habe dann sieht high als short ja so aus:00101010 00000000Wenn ich das jetzt nach links shifte kommt doch 0 raus

-
Charakter schrieb:
@SeppJ:
Aber wenn ich jetzt doch ein Big-Endian System habe dann sieht high als short ja so aus:00101010 00000000Wenn ich das jetzt nach links shifte kommt doch 0 raus

Nein. Die Shiftoperatoren arbeiten unabhängig von der internen Darstellung. Das sind mathematische Operatoren.
-
Das bedeutet also, dass ein Shiftoperator nach links bei Big-Endian Systemen zu einem Shiftoperator nach rechts mutiert, oder wie soll ich das verstehen? Denn Little-Endian ist ja die Darstellung, wie wir sie im Alltag benutzen.
-
Charakter schrieb:
Das bedeutet also, dass ein Shiftoperator nach links bei Big-Endian Systemen zu einem Shiftoperator nach rechts mutiert, oder wie soll ich das verstehen? Denn Little-Endian ist ja die Darstellung, wie wir sie im Alltag benutzen.
Nein. Die interne Darstellung interessiert den Shiftoperator überhaupt gar nicht. Da kann auch ein kleiner Kobold mit Zettel und Stift im Rechner sitzen, es kommt trotzdem das gleiche dabei raus. Oder der Rechner rechnet intern mit dreiwertigen Bits. Oder Quantenbits. Alles egal.
-
Charakter schrieb:
Denn Little-Endian ist ja die Darstellung, wie wir sie im Alltag benutzen.
Im Allrag wie in der Mathematik benutzt man Big-Endian.
-
ipsec schrieb:
Im Allrag wie in der Mathematik benutzt man Big-Endian.
1 1 11 Eintausend Einhundert ElfWo sind denn da die großen Zahlem am Ende?
-
Also zumindest bei meinem Zahlenverständnis ist immer noch Eintausend > Einhundert > Elf.
-
Charakter schrieb:
Hallo,
ich möchte 2 chars zu einem short konvertieren. Mein momentaner Code sieht so aus:unsigned high = 42; unsigned char low = 23; unsigned short both = static_cast<unsigned short>(high << 8 | low); std::cout << both << std::endl; // Ausgabe 10775Nun funktioniert diese Code nur mit Little-Endian Maschinen. Auf wikiepdia steht jetzt, dass heutige PC Systeme alle Little-Endian benutzen, stimmt das, und wenn nicht, was für eine Plattformübergreifende Methode gibt es?
Sofern ein unsigned char auf der jeweiligen Plattform tatsächlich einem Oktett entspricht, ist es egal, ob Little- oder Big-Endian. Dann wird das so funktionieren.
Und es ist nicht alles Little-Endian. Die JVM arbeitet z.B. mit Big-Endian. Zumindest nach außen.
-
Charakter schrieb:
ipsec schrieb:
Im Allrag wie in der Mathematik benutzt man Big-Endian.
1 1 11 Eintausend Einhundert ElfWo sind denn da die großen Zahlem am Ende?
Sie stehen am linken Ende. Und das Ende ists, um das es geht:
wikipedia schrieb:
Bei Big-Endian [...] wird das Byte mit den höchstwertigen Bits (d. h. die signifikantesten Stellen) zuerst gespeichert, das heißt an der kleinsten Speicheradresse.