String中的Java字节表示

时间:2011-11-30 09:30:09

标签: java android byte

我正在从硬件设备接收数据。我收到它作为一个字节数组。我想构建并存储一个String,它可以显示字节数组的数据。这就是我所拥有的:

byte[] buffer = new byte[BUFFER_SIZE];
bytes = mmInStream.read(buffer);
String[] str = new String[bytes];
StringBuffer readMessage = new StringBuffer();

for(int i=0; i<bytes; ++i){
  str[i] = Integer.toHexString(buffer[i]);
   while (str[i].length() < 8){  //standarize size 
     str[i] = '0' + str[i];    
   }
  readMessage.append(str[i]);
}

我遇到的主要问题是,当我将字节转换为String时,我收到了意外的字节。我收到纯字节,所以我期望值范围从0x00到0xFF。但是,一些字节被转换为像0xFFFFFF09这样的字节。为什么会发生这种情况?

3 个答案:

答案 0 :(得分:2)

您应该以这种方式将byte转换为int

int byteAsInt = ((int)buffer[i]) & 0x000000FF;
str[i] = Integer.toHexString(byteAsInt);

答案 1 :(得分:1)

byte是有符号数据类型,因此0xFF为-1。当转换为更大的整数类型时,它仍然是-1,即16位和32位整数值的0xFFFF或0xFFFFFFFF。

修改:

如果要获取无符号值,请在分配更大的变量时使用0xFF按位AND(&amp;)。

答案 2 :(得分:0)

如果不运行代码,我认为您的问题存在于内循环中。

while(str [i] .length()&lt; 8){//标准尺寸      str [i] ='0'+ str [i];
   }

您想要达到什么目标?打印0xFF而不是FF?在这种情况下,只需修改一行如下:

str[i] = "0x" + Integer.toHexString(buffer[i]);

并删除内循环。