6

BluetoothChat サンプル コードに基づいてアプリを開発しています。16 進値を含むバイト配列を出力ストリームに書き込めるようにする必要があります。入力ストリームのバイト配列を解析し、16 進数値を読み取る必要もあります。これは、バイト配列に16進値を単純に書き込むための私のコードです

byte[] data = new byte [3];
data[0] = (byte) 0x53;
data[1] = (byte) 0x1C;
data[2] = (byte) 0X06;

ただし、デバッグをステップ実行して「データ」を監視すると、デバッガーは値を data[0]=83、data[1]=28、data[2]=6 として表示します。すべての値が ascii に変換されるのはなぜですか? 入力ストリームを読み取るときに byte[] バッファを見ると、同じことが起こっています。

 // Read from the InputStream
 bytes = mmInStream.read(buffer);

16 進値を含むバイト配列を送信しましたが、byte[] バッファに ascii 値が表示されています。Bluetooth経由で生の16進値を読み書きするにはどうすればよいですか? 読み取り/書き込みストリームの一部は、コマンド用に 15 バイト未満の短いストリームになります。しかし、16 進バイトとしてエンコードされた大きなファイルを読み取る必要もあります。その入力ストリームに関する提案はありますか? BufferedInputStream を使用する必要がありますか?

4

1 に答える 1

8

あなたが書くとき

int answer = 42;
System.out.println(answer);

int変数に格納された値answerは に変換Stringされ、モニターに表示されます。同じことが、IDE のデバッガーで値を表示する場合にも当てはまります。最終的に、すべての数値データは、表示するために ASCII (またはその他の文字エンコーディング) に変換されます。これは、どのプログラミング言語にも当てはまります。

では、この変換がどのように行われるのか疑問に思うかもしれません。デフォルトでは、int値は 10 進数表現に変換されます。これは、ほとんどの人間が読み慣れていて、見たいと思っているものです。intプログラマーは、コードで行っているように、値の 16 進表現について考える必要がある場合があります。ただし、16 進表現を使用して変数の値を設定したからといって、コンピューターがこれを自動的に認識するわけではありません。特に、IDE はデフォルトですべてのintデータを 10 進表現で表示します。

幸いなことに、IDE 設計者はプログラマーであり、intデータを別の形式で見る必要がある場合があることを認識しています。デバッガーの設定を変更して、intデータを 16 進数で表示することができます。これを行う手順は IDE によって異なるため、詳細についてはヘルプ ファイルを確認してください。

于 2012-11-08T21:29:06.250 に答える