質問

私はNSDataのにInt64型からlong値を変換する必要があるので、私は後でそれに対してハッシュアルゴリズムを実行することができます。私が実行します:

int64_t longNumber = 9000000000000000000L;
NSMutableData *buffer = [NSMutableData dataWithBytes:&longNumber length:sizeof(longNumber)];

NSLog(@"%lld", [buffer bytes]);
NSLog(@"%lld", longNumber);

結果のコンソール出力は次のようになります。

6201314301187184 9000000000000000000

なぜNSDataのは、適切に長い数の値を格納していませんか?私はループでこれを実行すると、NSDataのは620、そして621と上から始めて、ドリフトバイト。私は[バッファバイト]はなく、その値を介しlongNumberのアドレスを出力するのですか?

役に立ちましたか?

解決

まず、あなたの数はあなたにそれをキャストしていることを長い間、大きすぎる:

あなたは二つの大きな問題を抱えています。代わりに9000000000000000000Lのあなたは長い長い定数を示すために9000000000000000000LLを持っている必要があります。

第二に、あなたはアドレスをプリントアウトされ、正しくあなたの質問に答えました。このラインでのあなたのNSLogの行を置き換えます:

NSLog(@"%lld", *((int64_t*)[buffer bytes]));

と、あなたが期待する結果が表示されるはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top