2012-04-08 8 views
0

Ich arbeite an einem 64-Bit-Intel-Prozessor ... ich lernte über große und kleine Endian und was ich verstand war, dass dies Bytes Ordnungen innerhalb eines Wortes sind, so dass in einem 64-Bit-Daten, MSB wird hat niedrigste Adresse in big-endian-Form und die höchsten Adresse in little-endian-Form ... jetzt habe ich ein Problem:Big Endian vs Little Endian

ich schrieb this code
, um zu bestimmen, ob mein Prozessor wenig oder big-endian ...
I-Eingang

0102030405060708 (this is in hex) 

und gehofft,zu bekommenund 07 und 06 und ... und 01 als Antwort

bekam aber stattdessen 0 und 25 und 50 und -125 und -13 und 501 und -41 und 66.
wenn ich den gleichen Code unter 's' als 2 Byte (kurz) schrieb, war der Ausgang für 01022 und 1 (was in Übereinstimmung mit Little Endian ist) ... so was schief gelaufen hier?

+0

Wenn Sie Ihre Frage schreiben, beachten Sie, dass es eine Vorschau dessen zeigt, wie es aussehen wird. Bitte verwenden Sie das, um sicherzustellen, dass Ihre Frage * lesbar * aussieht. Danke :) – jalf

+0

Was erwarten Sie, um der Bit-Code eines Doppelten zu sein, das 0x0102030405060708 darstellt? – Nobody

+0

Siehe [hier] (http://Stackoverflow.com/q/9971369/440558) für eine Frage, die eine Methode zum Finden der Endianess enthält. –

Antwort

3

Sie speichern Ihren Eingabewert als double, der den Wert als floating point Wert speichert. Verwenden Sie stattdessen eine long long, die eine 64-Bit-Ganzzahl ist, und speichern Sie den Wert wie erwartet.

+0

danke ... es funktionierte – avinash

+0

wenn mein Wort von 64 Bit ist und es gab einen Datentyp 9 Byte lang und ich setzte es auf 0x010203040506070809 ... und folgen Sie dem gleichen Verfahren ... würde ich sehen 09 und 08 und 07 ... und 02? wo würde 01 gehen .... niedrigstes Adressbyte oder höchstes Adressbyte des nächsten Wortes? – avinash

+0

@avinash Es ist unmöglich, einen 9-Byte-Datentyp in 8Byte zu speichern, daher würde es normalerweise vor dem Speichern einen Kompilierzeitfehler verursachen (gut oder Sie erhalten irgendeine Art von Abschneidung, was normalerweise bedeutet, dass Sie das höhere Byte verlieren, das nicht möglich ist) dargestellt werden) – Voo

2

Eine Hexadezimalzahl in (double) zu nehmen ist nicht wahrscheinlich, was Sie erwarten; Es ist ein Fließkommawert bestehend aus einer Basis 2 Mantisse und einem Exponenten. Vielleicht finden Sie (long) oder (long long), um näher zu sein, was Sie vorhatten.

+0

thanks..it arbeitete – avinash

Verwandte Themen