2012-04-08 362 views
0

我在一個64位的英特爾處理器上工作......我正在學習關於big和little endian以及我瞭解的是,這些是一個字內的字節順序,因此在64位數據中,msb將在大端形式和小尾數形式的最高地址最低地址...現在我有一個問題:big endian vs little endian

我寫this code
確定我的處理器是很少或大端...
我輸入

0102030405060708 (this is in hex) 

並希望得到080706和......和01作爲答案

,而是得到了02550-125-13501-4166
當我寫's'爲2字節(短)相同的代碼時,0102的輸出是21(這是根據小尾數)...所以這裏出了什麼問題?

+0

當你寫你的問題時,請注意它顯示了它的樣子。請使用它來確保您的問題看起來*可讀*。謝謝:) – jalf 2012-04-08 12:14:10

+0

你期望什麼是代表0x0102030405060708的double的位代碼? – Nobody 2012-04-08 12:16:32

+0

請參見[這裏](http://stackoverflow.com/q/9971369/440558),其中包含一個用於查找Endianess方法的問題。 – 2012-04-08 12:16:50

回答

3

您正在將輸入值存儲爲double,該值將該值存儲爲floating point值。嘗試使用long long,而不是64位整數,並且應該按照您的預期存儲值。

+0

謝謝...它的工作 – avinash 2012-04-08 12:23:00

+0

如果我的單詞是64位,並有一個數據類型9字節長,我把它設置爲0x010203040506070809 ...並按照相同的程序...我會看到09和08和07 ...和02? 01去哪裏......下一個字的最低地址字節或最高地址字節? – avinash 2012-04-08 12:41:09

+0

@avinash以8byte存儲9byte數據類型是不可能的,因此在存儲它之前,它通常會引發編譯時錯誤(或者你會得到某種截斷,這通常意味着你失去了不能存儲的高位字節代表) – Voo 2012-04-08 15:33:07

2

將一個十六進制數字變成(double)不可能達到你所期望的效果;它是一個浮點值,由一個基2尾數和指數組成。你可能會發現(long)(long long)更接近你想要的。

+0

謝謝..它工作 – avinash 2012-04-08 12:22:11