在java中将十六进制转换为字节

Sac*_*K S 1 java parsing hex

我是java的新手.我有一个逐行的十六进制值的文本文档,我试图读取它并将其转换为字节数组.但对于像8,d,11,0,解析即时得到错误的值对于E4为-28而不是228时E4的十六进制值我怎样才能克服这个转换错误....

          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;
Run Code Online (Sandbox Code Playgroud)

Aln*_*tak 5

字节(和所有其他整数类型)都签署了在Java中,不无符号.

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

您可以通过屏蔽与所述字节值得到"正确"的无符号数int的值0xff,但所得到的值itselt将是一个int太:

int n = (myByte & 0xff);
Run Code Online (Sandbox Code Playgroud)