【发布时间】:2012-10-29 04:18:40
【问题描述】:
我正在开发一个基于 BluetoothChat 示例代码的应用程序。我需要能够将包含十六进制值的字节数组写入输出流。我还需要解析输入流上的字节数组并读取十六进制值。这是我的代码,只是简单地将十六进制值写入字节数组
byte[] data = new byte [3];
data[0] = (byte) 0x53;
data[1] = (byte) 0x1C;
data[2] = (byte) 0X06;
但是,当单步调试并查看“数据”时,调试器将值显示为 data[0]=83、data[1]=28、data[2]=6。为什么所有的值都转换为ascii?当我在读取输入流时观看 byte[] 缓冲区时,也会发生同样的事情。
// Read from the InputStream
bytes = mmInStream.read(buffer);
我发送了一个包含十六进制值的字节数组,但 byte[] 缓冲区显示的是 ascii 值。如何通过蓝牙读取和写入原始十六进制值?一些读/写流将是短的
【问题讨论】:
-
我不知道你有没有注意到,但 0x53 等于十进制 83,与 0x1C 和 28 相同。所以调试器转换为整数。
-
@JonathanCruz 0x53 是一个整数,与 83 一样多。不同之处在于所使用的表示。
-
@Code-Guru 0x53 是十六进制的,所以如果您计算 hex 53 == dec 83。如果您说它们都是字节,我会同意,但您会将整数与我认为的字节混淆。这不是转换问题,它只是您阅读它的方式 i.o.w.你戴什么眼镜才能看穿。向数组中添加 0x53 与添加 83 相同。
-
@JonathanCruz 我通常使用(并阅读)一般意义上的“整数”一词来表示整数。我使用“int”作为编程语言数据类型。我对“代表”这个词的强调是我说“你戴哪个眼镜”的方式。我的回答试图解释这个主题。
标签: java android debugging stream hex