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

前端之家收集整理的这篇文章主要介绍了java – 如何在BluetoothChat中从输入/输出流读取/写入原始十六进制字节?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个基于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吗?

解决方法

当你写作
int answer = 42;
System.out.println(answer);

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

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

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

猜你在找的Java相关文章