0

値が 2 の整数があります。これを次のように NSMutableData オブジェクトに追加します。

[data appendBytes:&intVal length:2];

数値 2 は、int から取得したいバイト数です。データをログに記録すると、見たいのは <0002> (1 つの空のバイトの後に 1 つの空でないバイトが続く) ですが、得られるのは <0200> です。

何か不足していますか?バイトの順序と長さは非常に具体的である必要があります。これは、直接ソケット接続 API 用です。ここで何が間違っているのかよくわかりません。たぶん私はそれを間違って読んでいます。

助けてくれてありがとう。

4

3 に答える 3

2

私は何かが足りないのですか?

はい、システムのエンディアンは必要なものと一致しません。リトルエンディアンまたはビッグエンディアンに変換します(POSIX Cライブラリには、この目的のための関数が<netinet.h>または<inet.h>ヘッダーのどこかにあります)。

于 2013-02-13T22:20:58.260 に答える
0

NSData の description メソッドは、その値を 16 進形式で出力します。これは、2 バイトを表すのに 4 桁が必要であることを意味します。各バイトは 2^8=256 の異なる値をマップする可能性があり、16 進数の各桁は 16 の可能な値をマップする可能性があるため、16x16x16x16 = 2^16 となり、これはまさに 2 バイトでマップできるものです。 .

于 2013-02-13T22:18:22.840 に答える