首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Java中,为什么我的字节数组的元素包含两个字节?

在Java中,为什么我的字节数组的元素包含两个字节?
EN

Stack Overflow用户
提问于 2013-04-05 07:43:51
回答 2查看 570关注 0票数 1

我正在编写一个基于Java的Android应用程序,它从蓝牙芯片接收一个基于c++的无符号char[]字节数组,并将其流成一个字节数组。

事实上,它是Android和蓝牙,但这并不重要,它只是背景。但是,如果这有区别的话,我将使用最小的API 8。

主要代码是:

代码语言:javascript
运行
复制
InputStream is = socket.getInputStream();
DataInputStream dis = new DataInputStream(is);
byte[] buffer = new byte[1024];
bytesRead = dis.read(buffer, 0, 1024);

但是,当我查看缓冲区的实际内容时,我会看到以下内容:

代码语言:javascript
运行
复制
[0] 15 [0xf] [^O]   
[1] 15 [0xf] [^O]   
[2] 0 [0x0] [^@ (NUL)]  
[3] -119 [137] [0x89] [^É]  
[4] 2 [0x2] [^B]    
[5] 6 [0x6] [^F]    
[6] 26 [0x1a] [^Z]  
[7] -47 [209] [0xd1] [Ñ]    
[8] -1 [255] [0xff] [ÿ] 
[9] 104 [0x68] [h]  
[10]    -1 [255] [0xff] [ÿ] 
[11]    -46 [210] [0xd2] [Ò]    
[12]    -1 [255] [0xff] [ÿ] 
[13]    104 [0x68] [h]  
[14]    -19 [237] [0xed] [í]    
[15]    -128 [128] [0x80] [^À]  

上面的是从eclipse表达式视图中设置的要显示的副本。

  1. 元素#
  2. 符号int值
  3. 如果为负值,则除非#2为负值,否则不显示此值。
  4. 十六进制值
  5. ASCII值

我的问题是,如果这是一个字节数组,为什么一些十六进制值包含两个字节。查看元素6到14,每个元素都是0x1a、0x12、0xff等。字节0到5都是一个字节(元素3除外)。

我不认为这是蓝牙方面的问题,因为我看到实际的代码正在生成,而且它是一个未签名的char[]数组,每个元素只有一个字节。此外,我还记得在以前的一个小项目中看到过这样的事情,该项目涉及从在线API中获取数据流。

如何确保Java数组元素只包含一个字节?就这一点而言,我觉得我对Java没有什么重要的理解,因为这让我感到困惑-- Java如何允许一个字节数组每个元素包含多个字节?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-05 07:49:09

你混淆了字节和十六进制数字。

一个字节包含8位。一个十六进制数字从0到F,因此只有4位(16值,16 = 2^4,因此4位)。因此,一个字节使用两个十六进制数字表示。

0xf等同于0x0f。前4位都是0,最后4位都是1。

票数 5
EN

Stack Overflow用户

发布于 2013-04-05 07:51:39

一个字节是8位,所以可以容纳0- (2^8 - 1),即0-255 (0x0-0xff)。所有的值都是一个字节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15828460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档