重复: Compare hexadecimal and decimal values
我正在java中实现x-modem协议,我正在读串口并存储大小为1024的字节数组。然后我将数据转换为字符串我在数据包中得到133个字节,问题是我是不能比较字符串和字节数组中的十六进制值。我要在数据中找到SOH即0x01,EOT=0x02
,但我无法理解如何做到这一点。
以下是代码的一部分:
char SOH=0X01;
public void readResponse()
{
byte[] buffer = new byte[1024];
int len = -1;
String data;
try
{
while ((len = this.getIn().read(buffer)) > -1)
{
data = new String(buffer,0,len);
time = System.currentTimeMillis();
data = new String(buffer, 0, len);
System.out.println("Data length is "+data.length());
System.out.println(data);
for(int i=0;i<carray.length;i++)
{
if(data.CharAt(i)==SOH)
{
System.out.println("SOH["+i+"]"+data.CharAt(i));
}
}
}
提前致谢。
答案 0 :(得分:1)
处理二进制数据时,请勿使用String
/ char
。请改用byte[]
/ byte
。在尝试修复任何其他错误之前修复它。
char
是Java中的16位值,它与C char
(定义为字节)不同。 Java中与C char
最接近的是byte
(已签名,但是)。
答案 1 :(得分:1)
你将字节与字符串进行比较 - 这是一件坏事,因为你不知道Java正在使用什么编码来将给定字节转换为文本表示。
使用ByteBuffer并在读取原始字节时进行比较。