您的位置:首页 > 其它

byte类型的问题

2013-08-09 17:14 127 查看
问题:android客户端通过tcp接收服务器发送的int型数据“3555”,服务器端发送了两个字节“0D E3”,android使用“byte[] b = new byte[80]; int a = reader.read(b);”接收之后进行打印“System.out.println("接收到的数据:" + b[0]);System.out.println("接收到的数据:" + b[1]);“,发现打印结果是”接收到的数据是 13 接收到的数据是 -29“。这是为什么?

分析:android接收到的却是是“0D E3”,这个数据在内存以2进制的方式进行存放”0000 1011“ ”1110 0011“,但是byte是有符号位的,当读取的时候,系统把8位二进制数解析成1位符号位和7位数据位,最高位符号位0表示正,1表示负,这样的话”0000 1011“读出后转化成10进制是13,而”1110 0011“因为是负数,所以用补码表示为”10011101“,换成十进制为 -29 ,这就是为什么读到的是13 -29。

问题:如何转化成”3555“

分析:0D和 E3组合成0D E3才能正确转换成3555,那么,对-29的部分来说,它正好少了一个最高位+1,只需要把-29加上256即可得到227;高位13左移8位(即乘以256)得到3328;3328+227=3555,问题解决。

参考:http://blog.csdn.net/jackwofe/article/details/4955117
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: