2012-01-11 40 views
-2
char * data = 0xFF000010FFFFFFFFFFFFFFFFFFFFFFFFFFF; 

我想在data[1] (0x00000010)中獲得雙字,並將其存儲在var int i中。從二進制數據中獲取雙字

這會做詭計嗎?

int i = (int) data[1]+data[2]+data[3]+data[4] 
+3

答案取決於你的平臺是big-endian還是little-endian。但這不會有效。 – 2012-01-11 03:47:23

回答

2

您正在嘗試只添加四個字節,而不是位置的值到整數的正確部分。如果沒有指定您的平臺的endianness,則無法提供最終答案。

的一般方法是對每一個字節放置在INT的正確位置,這樣的事情:

INT I = 256個* 256個* 256個*數據[0] + 256個* 256個*數據[1] + 256個*數據[2] +數據[3]

(大端例如)

注意,索引是0爲基礎的,而不是1基於如在你的例子。這個例子中的「基數」是256,因爲每個字節可以代表256個值。

要理解爲什麼會是這樣,考慮小數

可以重新寫爲:

5000 + 200 + 30 + 4

或10 * 10 * 10 * 5 + 10 * 10 * 2 + 10 * 3 + 4

當您處理每個數字的數據時,您將該值乘以該數字的基數,數位位置(基數10的最右邊的數字是10^0,然後是10^1,10^2等)。

1

您必須將字符串轉換爲實際數據。考慮使用atol()或類似的東西來獲取內存中的值,然後擔心編輯它。

相關問題