我正在开发基于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吗?
答案 0 :(得分:8)
写作时
int answer = 42;
System.out.println(answer);
int
变量中存储的answer
值将转换为String
,然后显示在您的监视器上。这同样适用于在IDE的调试器中显示值。 最终,所有数字数据都将转换为ASCII(或其他一些字符编码)以显示它。在任何编程语言中都是如此。
现在我们可能想知道这种转换是如何发生的。默认情况下,int
值将转换为其十进制表示形式。这是大多数人习惯阅读和期望看到的东西。作为程序员,我们有时需要考虑int
值的十六进制表示,例如您在代码中所做的。但是,计算机不会自动知道这一点,因为我们使用十六进制表示设置变量的值。特别是,您的IDE仍默认以十进制表示形式显示所有int
数据。
幸运的是,IDE设计人员是程序员,并意识到我们有时需要以不同的形式查看int
数据。您可以更改调试器的设置,以将int
数据显示为十六进制。由于执行此操作的步骤取决于您的IDE,因此您应该查看帮助文件以获取详细信息。