1

我需要为我的传感器板读取串行端口,我使用这个例子来读取数据。但令我惊讶的是控制台终端上的输出数据看起来像这样

Wÿðÿ8Ã?íÈÓÿ

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

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

这种方法

    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);

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

4

2 回答 2

3

试试这个:

final byte[] arr = new byte[] { 0x00, 0x01 }; // or whatever your byte array is
final String asHexStr = DatatypeConverter.printHexBinary(arr)
System.out.println(asHexStr);
于 2013-04-14T20:59:28.480 回答
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
}
于 2013-04-14T20:57:05.077 回答