1

我是 java 新手。我有一个逐行包含十六进制值的文本文档,我试图读取它并将其转换为字节数组。但是对于像 8、d、11、0、e4 这样的十六进制值,当我将 e4 的错误值解析为 -28 而不是 228 时,我该如何克服这个转换错误....

          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 中是有符号的,而不是无符号的。

如果您只是将字节视为字节数组,则某些值为负数并不重要,它们的位表示仍然正确。

您可以通过使用 value 屏蔽字节值来获得“正确的”无符号值int0xff尽管结果值也将是一个int

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

As Alnitak said byte is signed in java. Value of 0xe4 = 228 which is unsigned, and the range of byte is -128 to 127.

My suggestion is to use int instead of byte like

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

You get the same thing which you have require.

于 2012-12-13T09:22:12.897 回答