1

私はJavaの初心者です.1行ごとに16進数の値を持つテキストドキュメントがあり、それを読み取ってバイト配列に変換しようとしています。しかし、8、d、11、0、e4 などの 16 進数値の場合、解析時に e4 の値が 228 ではなく -28 として間違っています。この変換エラーを克服するにはどうすればよいですか....

          FileInputStream fstream = new FileInputStream("C:/Users/data.txt");

          DataInputStream in = new DataInputStream(fstream);
          BufferedReader br = new BufferedReader(newInputStreamReader(in,"UTF-8"));


          byte[] bytes = new byte[1024];
          String str;
          int i=0;

          while ((str = br.readLine()) != null) 
          {

              bytes[i]= (byte) (Integer.parseInt(str,16) & 0xFF);
              i++;

          }
          byte[] destination = new byte[i];
          System.arraycopy(bytes, 0, destination, 0, i);

          br.close();
          return destination;
4

2 に答える 2

5

バイト (および他のすべての整数型) は、Java では符号付きであり、 unsignedではありません。

バイトをバイト配列として扱っているだけであれば、一部の値が負であっても問題ありません。それらのビット表現は依然として正しいです。

intbyte 値をvalueでマスクすることにより、「適切な」符号なし値を取得できます0xffが、結果の値も次のようになりintます。

int n = (myByte & 0xff);
于 2012-12-13T09:04:27.997 に答える
1

Alnitak述べたようbyteに、Javaで署名されています。符号なしの 0xe4 = 228 の値で、範囲byteは -128 ~ 127 です。

私の提案は、 likeintの代わりに使用することですbyte

int[] bytes = new int[1024];
bytes[i]= Integer.parseInt(str,16);

必要なものと同じものが得られます。

于 2012-12-13T09:22:12.897 に答える