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
分析: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
相关文章推荐
- byte数组转int类型,不足位数补0问题的解决
- byte或short类型在左移时应注意的问题
- Java中String类型和Byte类型的互换问题
- 解密Java byte类型的一个小问题
- 关于byte类型的运算问题(适合新手阅读)
- byte[]类型toString遇到的问题
- Byte类型问题
- ORACLE 中 VARCHAR2 类型的字段长度是按照 byte 来定义的 一个容易被忽略的问题
- python语言 buffer类型数据的使用 'ascii' codec can't decode byte 0xe5 问题的解决
- 有关java中数据类型byte,int的一个小问题
- Java中Byte类型数据在运算中的问题
- 两个byte变量在参与运算时的类型提升问题
- java-int&short-byte类型转换问题
- 【OpenCV】OpenCV的类型转换问题(BYTE、IplImage、Mat等)
- ABAP中接收.NET语言byte[]类型返回值问题
- java中byte[]转换成String类型的问题
- Java 中 byte 类型初始化问题
- java中byte[]转换成String类型的问题
- Short类型的List contains(Byte.valueOf("1"))的问题
- char/byte/short类型的加法和类型转换问题