如何将从串口接收的字节转换为十六进制?

时间:2013-04-14 20:46:05

标签: java serialization serial-port hex bytearray

我需要读取传感器板的串口,并使用此example来读取数据。 但我惊讶于控制台终端上的输出数据看起来像这样

Wÿðÿ8Ã?íÈÓÿ

因为我使用此System.out.print(new String(buffer,0,len)); 这种方法只是在每次接收数据包时打印数据。

但是当我将此方法用于hexa数字时,输出将在接收任何数据之前写入零!

这种方法

    byte[] arr = { 0x00, 0x01 };
    ByteBuffer wrapped = ByteBuffer.wrap(arr); // big-endian by default
    short  num = wrapped.getShort();
    String f=String.valueOf(num);
    System.out.print(f);

那么如何处理这个问题,将传入的字节转换成六进制的可读数据!!!

2 个答案:

答案 0 :(得分:3)

请改为尝试:

final byte[] arr = new byte[] { 0x00, 0x01 }; // or whatever your byte array is
final String asHexStr = DatatypeConverter.printHexBinary(arr)
System.out.println(asHexStr);

答案 1 :(得分:1)

您应充分利用现有界面。考虑使用printf

byte[] arr = { 0x00, 0x01 };
ByteBuffer wrapped = ByteBuffer.wrap(arr); // big-endian by default
boolean read = true;
while(read)
  try { System.out.printf("%x",wrapped.get()); } //get each byte, print as hex
  catch(BufferUnderflowException ex) { read = false; } //stop at empty buffer
}