加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 01:00:52 所属栏目:Java 来源:网络整理
导读:我正在开发一个基于BluetoothChat示例代码的应用程序.我需要能够将包含十六进制值的字节数组写入输出流.我还需要解析输入流上的字节数组并读取十六进制值.这是我的代码,只是简单地将十六进制值写入字节数组 byte[] data = new byte [3];data[0] = (byte) 0x5
我正在开发一个基于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,因此您应该查看帮助文件以获取详细信息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读