如何在BluetoothChat中从输入/输出流读取/写入原始十六进制字节?

时间:2012-11-08 21:21:38

标签: java android debugging stream hex

我正在开发基于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值。如何通过蓝牙读取和写入原始十六进制值?对于命令,一些读/写流将是短的< 15byte流。但我还需要读取一个编码为十六进制字节的大文件。对该输入流的任何建议?我需要使用BufferedInputStream吗?

1 个答案:

答案 0 :(得分:8)

写作时

int answer = 42;
System.out.println(answer);

int变量中存储的answer值将转换为String,然后显示在您的监视器上。这同样适用于在IDE的调试器中显示值。 最终,所有数字数据都将转换为ASCII(或其他一些字符编码)以显示它。在任何编程语言中都是如此。

现在我们可能想知道这种转换是如何发生的。默认情况下,int值将转换为其十进制表示形式。这是大多数人习惯阅读和期望看到的东西。作为程序员,我们有时需要考虑int值的十六进制表示,例如您在代码中所做的。但是,计算机不会自动知道这一点,因为我们使用十六进制表示设置变量的值。特别是,您的IDE仍默认以十进制表示形式显示所有int数据。

幸运的是,IDE设计人员是程序员,并意识到我们有时需要以不同的形式查看int数据。您可以更改调试器的设置,以将int数据显示为十六进制。由于执行此操作的步骤取决于您的IDE,因此您应该查看帮助文件以获取详细信息。