【发布时间】:2013-04-14 20:46:04
【问题描述】:
我需要为我的传感器板读取串行端口,我使用这个example 来读取数据。 但令我惊讶的是控制台终端上的输出数据看起来像这样
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);
那么如何处理这个问题以将传入的字节转换为十六进制的可读数据!!!
【问题讨论】:
-
您的代码与打印十六进制无关。你需要一些更简单的东西。试试
Integer.toString(b & 0xFF, 16),其中b是一个单独的字节。 -
这段代码
new String(buffer,0,len)使用平台默认编码将缓冲区转换为String- 这就是为什么你会胡言乱语。 -
@bmorris591 怎么做?
-
@MarkoTopolnik,每次使用 buffer[len] 获取单个字节??
-
我假设你有一个字节数组,所以遍历所有字节。
标签: java serialization serial-port hex bytearray