Sind Casting-Typen von Big / Little Endian abhängig?

8

Betrachten Sie dieses kleine Stück Code:

%Vor%

Auf meinem PC druckt es 0x01 und ich bin nicht überrascht. Wie würde es bei BIG ENDIAN funktionieren? Ich erwarte, dass es 0x10000001 drucken würde. Habe ich recht?

Ich habe Bücher und Web durchsucht, aber ich habe keine klaren Informationen darüber gefunden, wie die Casting-Operation wirklich mit der Erinnerung umgeht.

    
code_scout 27.11.2013, 10:51
quelle

4 Antworten

14

Nein, das Casting wie das in Frage stehende speichert den Wert wenn möglich und hängt nicht von der Speicherdarstellung ab.

Wenn Sie die Speicherdarstellung neu interpretieren möchten, müssen Sie Zeiger umsetzen. Dann wird es auf Endianess abhängen:

%Vor%     
Juraj Blaho 27.11.2013 10:56
quelle
8

Zahlen sind keine Groß- oder Kleinendianer. Sequenzen von Bytes sind Big- oder Little-Endian. Zahlen sind nur Zahlen.

C numerische Typen befassen sich wenig überraschend mit Zahlen , nicht mit Sequenzen von Bytes .

    
R. Martinho Fernandes 27.11.2013 11:00
quelle
2

Nein. Endianness spielt in diesem Beispiel keine Rolle. Konvertieren in char (vorausgesetzt, ein Zeichen ist schmaler als ein int), werden die niederwertigen Bits beibehalten, und niederwertigere Bits sind niederwertigere Bits, unabhängig davon, wie sie im Speicher gespeichert sind.

    
Thomas Padron-McCarthy 27.11.2013 10:56
quelle
0

C ++ - Standard besagt Folgendes:

  

5.2.3.1 Ein Simple-Type-Specifier (7.1.5), gefolgt von einer in Klammern gesetzten Ausdruckliste, konstruiert einen Wert des angegebenen Typs unter Berücksichtigung der   Ausdrucksliste.

Also ja, es konstruiert eine neue Instanz, die den breiteren Typ zu einem kürzeren Typ herabsetzt, ungeachtet der binären Darstellung. Wenn Sie also an einem exakten Teil des int interessiert sind, der an char übergeben werden soll, verwenden Sie den bitweisen Verschiebungsoperator - er ist plattformunabhängig und erzeugt vorhersagbare Ergebnisse.

    
Yury Schkatula 27.11.2013 11:10
quelle

Tags und Links