[英]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.