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

data[1] (0x00000010)でダブルワードを取得し、それをvar int iに保存したいとします。バイナリデータからダブルワードを取得

これはトリックですか?

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

答えは、プラットフォームがビッグエンディアンであるかリトルエンディアンであるかによって異なります。それはどちらの方法でも動作しません。 –

答えて

2

整数の正しい部分に値を配置するのではなく、ちょうど4バイトを追加しようとしています。お使いのプラットフォームの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()などを使ってメモリ内の値を取得し、それを編集することを心配してください。

関連する問題