Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » little vs big endian

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.11.2005, 13:30 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Ich weiß zwar nicht genau wieso aber mir hat sich gerade folgende Frage aufgetan:

Ein Intel PC arbeitet ja nach dem Little Endian System und wenn ich jetzt folgendes Schreibe

C++:
int i = 5;
char c = i;


dann hab ich in c ja eine 5 drin stehen. Bei

C++:
int i = 500000;
char c = i;


steht eine 32 in c, weil der int ja 3 Byte mehr hat und anscheinend einfach das Erste in c kopiert wird.

Was wäre jetzt auf einer Big Endian Maschine mit dem ersten Beispiel? Würde da trotzdem eine 5 in c stehen oder nicht?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.11.2005, 13:43 Uhr
0xdeadbeef
Gott
(Operator)


In dem Fall nicht, nein, weil auf einer big-endian-Maschine dem char der Wert des hintersten bytes zugewiesen würde. Einen Unterschied macht es bei folgendem Code:

C++:
int i;
char s[sizeof(int)];

memcpy(s, &i, sizeof(int));


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.11.2005, 14:03 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)



Zitat von 0xdeadbeef:
In dem Fall nicht, nein, weil auf einer big-endian-Maschine dem char der Wert des hintersten bytes zugewiesen würde.

Moment, d.h. es würde die 5 drin stehen?


Zitat von 0xdeadbeef:

Einen Unterschied macht es bei folgendem Code:

C++:
int i;
char s[sizeof(int)];

memcpy(s, &i, sizeof(int));



Ja das hab ich mir gedacht, ich war mir nur nicht sicher ob er das bei c=i automatisch umdreht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.11.2005, 14:12 Uhr
ao

(Operator)



Zitat von Guybrush Threepwood:
Bei

C++:
int i = 500000;
char c = i;


steht eine 32 in c, weil der int ja 3 Byte mehr hat und anscheinend einfach das Erste in c kopiert wird.

Die Beobachtung ist richtig, die Erklärung ist falsch.

500000 (dezimal) ist 0x7A120 (hex). Dein Code ist also identisch mit

C++:
int i = 0x7a120;
char c = i; //  (char) 0x7a120 wird zu 0x20, und das ist dezimal 32.



Beim Casten auf den kleineren Typ werden die hohen Bits weggeworfen, unabhängig von der Endianness.

ao


Bearbeitung von ao:
Zahlendreher berichtigt.

Dieser Post wurde am 25.11.2005 um 14:16 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.11.2005, 14:14 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Also wird immer automatisch beim niedrigsten Bit begonnen egal wie rum die Bitreihenfolge ist?

Ok mit deinem Edit hat sich das für mich geklärt. Danke euch beiden

Dieser Post wurde am 25.11.2005 um 14:15 Uhr von Guybrush Threepwood editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: