-1

文字列のASCII値を出力する必要があるという要件があります.値を出力しようとすると、予期しない値が出力されます.私のプログラムは以下のようになります

  int s=1161;

  String hex=Integer.toHexString(1161);
   hex="0"+hex;

  char firstByte = (char) (Integer.parseInt(hex.substring(0,2),16));
  char secondByte = (char) (Integer.parseInt(hex.substring(2,4),16));

プログラムが最初のバイトである場合の出力--いくつかの長方形の形状の2番目のバイト--?

ここで、ASCIIコードは最初のバイト-- EOTの2番目のバイト--‰であると予想しています</p>

どうすればこれを達成できますか?

4

3 に答える 3

1

あなたはやや複雑な方法でフォローするつもりです:

String hex = String.format("%04x", s); // delivering 0489

最初のバイトは0x04=4、ASCII制御文字、Ctrl-D、またはEOTです。

2番目のバイトは89で、実際には7ビットのASCII範囲外です。promil記号である可能性のあるエンコーディングによって異なりますが、Unicodeでは、位置揃えのあるタブのUnicode制御文字になります。

于 2012-05-13T08:45:27.333 に答える
0

次のコードを試してください...

    int s = 1161;

    String hex = Integer.toHexString(s);
    // hex="0"+hex;

    char firstByte = (char) (Integer.parseInt(hex.substring(0, 2), 16));
    char secondByte = (char) (Integer.parseInt(hex.substring(2, 3), 16));

    System.out.println("First = " + firstByte + ", Second = " + secondByte + ", Hex " + hex);

出力

First = H, Second =     , Hex 489
于 2012-05-13T08:35:50.380 に答える
0

より信頼性の高い入力で関数をテストします。EOT のような制御文字は、四角またはその他の種類のプレースホルダーで表すことができます。127 を超えるものは、ASCII で一意に定義されていないため、「?」と表示されるだけです。私にはあなたの機能が正しく動作しているようです。

適切に定義されたすべての ascii シンボルについては、 http://en.wikipedia.org/wiki/Asciiも参照してください。

于 2012-05-13T08:43:02.127 に答える