繁体   English   中英

字符串中的Java字节表示

[英]Java byte representation in 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之类的字节。 为什么会这样?

您应该这样将byte转换为int

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

字节是有符号数据类型,因此0xFF为-1。 转换为较大的整数类型时,它仍将为-1,即对于16位和32位整数值,分别为0xFFFF或0xFFFFFFFF。

编辑:

如果要获取无符号值,则在分配给较大的变量时,请对0xFF进行按位与(&)。

如果不运行代码,我想您的问题出在您的内部循环中。

while(str [i] .length()<8){//标准化大小str [i] ='0'+ str [i];
}

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

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

并删除内部循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM