字节数组&无符号&网络序字节序
2015-06-29 11:06
465 查看
别人写的东西
http://www.cnblogs.com/techmango/archive/2012/05/24/2516526.html
byte:占一个字节,表示-128至127之间的整数值
整数234567的内存写照为:00000000 00000011 10010100 01000111
(1)
>>右移
将操作符左边的数向右移动指定的位数
那么现在内存中234567>>4的内存写照为 00000000 00000000 00111001 01000100
——从高位第一位开始,统一向右移动四位,前面补0
(2)
<<左移
将操作符左边的数向左移动指定的位数
现在内存中234567<<4的内存写照为:00000000 00111001 01000100 01110000
(3)java中number & 0xff什么解释?
&是“与”运算
把number转换为二进制,只取最低的8位(bit)(因为0xff为十六进制形式,转换为二进制就是1111 1111)。
& 运算:如果对应的两个bit都是1,则那个bit结果为1,否则为0.
比如 1010 & 1101 = 1000 (二进制)
由于0xff最低的8位是1,因此number中低8位&之后,如果原来是1,结果还是1,原来是0,结果位还是0.高于8位的,0xff都是0,所以无论是0还是1,结果都是0.
number如果为0xabcd,那么number & 0xff = number & 0x00ff = 0x00cd = 0xcd
网络序字节序
http://www.cnblogs.com/jacktu/archive/2008/11/24/1339789.html http://blog.chinaunix.net/uid-12782-id-2915864.html
别人的文章
http://blog.163.com/tfn2008@yeah/blog/static/11032131920131211310727/
直接摘抄过来
在Java中,不存在Unsigned无符号数据类型,但可以轻而易举的完成Unsigned转换。
方案一:如果在Java中进行流(Stream)数据处理,可以用DataInputStream类对Stream中的数据以Unsigned读取。
Java在这方面提供了支持,可以用java.io.DataInputStream类对象来完成对流内数据的Unsigned读取,该类提供了如下方法:
(1)int readUnsignedByte() //从流中读取一个0~255(0xFF)的单字节数据,并以int数据类型的数据返回。返回的数据相当于C/C++语言中所谓的“BYTE”。
(2)int readUnsignedShort() //从流中读取一个0~65535(0xFFFF)的双字节数据,并以int数据类型的数据返回。返回的数据相当于C/C++语言中所谓的“WORD”, 并且是以“低地址低字节”的方式返回的,所以程序员不需要额外的转换。
方案二:利用Java位运算符,完成Unsigned转换。
正常情况下,Java提供的数据类型是有符号signed类型的,可以通过位运算的方式得到它们相对应的无符号值,参见几个方法中的代码:
public int getUnsignedByte (byte data){ //将data字节型数据转换为0~255 (0xFF 即BYTE)。
return data&0x0FF;
}
public int getUnsignedByte (short data){ //将data字节型数据转换为0~65535 (0xFFFF 即 WORD)。
return data&0x0FFFF;
}
public long getUnsignedIntt (int data){ //将int数据转换为0~4294967295 (0xFFFFFFFF即DWORD)。
return data&0x0FFFFFFFFl;
}
http://www.cnblogs.com/techmango/archive/2012/05/24/2516526.html
byte:占一个字节,表示-128至127之间的整数值
整数234567的内存写照为:00000000 00000011 10010100 01000111
(1)
>>右移
将操作符左边的数向右移动指定的位数
那么现在内存中234567>>4的内存写照为 00000000 00000000 00111001 01000100
——从高位第一位开始,统一向右移动四位,前面补0
(2)
<<左移
将操作符左边的数向左移动指定的位数
现在内存中234567<<4的内存写照为:00000000 00111001 01000100 01110000
(3)java中number & 0xff什么解释?
&是“与”运算
把number转换为二进制,只取最低的8位(bit)(因为0xff为十六进制形式,转换为二进制就是1111 1111)。
& 运算:如果对应的两个bit都是1,则那个bit结果为1,否则为0.
比如 1010 & 1101 = 1000 (二进制)
由于0xff最低的8位是1,因此number中低8位&之后,如果原来是1,结果还是1,原来是0,结果位还是0.高于8位的,0xff都是0,所以无论是0还是1,结果都是0.
number如果为0xabcd,那么number & 0xff = number & 0x00ff = 0x00cd = 0xcd
网络序字节序
http://www.cnblogs.com/jacktu/archive/2008/11/24/1339789.html http://blog.chinaunix.net/uid-12782-id-2915864.html
别人的文章
http://blog.163.com/tfn2008@yeah/blog/static/11032131920131211310727/
直接摘抄过来
在Java中,不存在Unsigned无符号数据类型,但可以轻而易举的完成Unsigned转换。
方案一:如果在Java中进行流(Stream)数据处理,可以用DataInputStream类对Stream中的数据以Unsigned读取。
Java在这方面提供了支持,可以用java.io.DataInputStream类对象来完成对流内数据的Unsigned读取,该类提供了如下方法:
(1)int readUnsignedByte() //从流中读取一个0~255(0xFF)的单字节数据,并以int数据类型的数据返回。返回的数据相当于C/C++语言中所谓的“BYTE”。
(2)int readUnsignedShort() //从流中读取一个0~65535(0xFFFF)的双字节数据,并以int数据类型的数据返回。返回的数据相当于C/C++语言中所谓的“WORD”, 并且是以“低地址低字节”的方式返回的,所以程序员不需要额外的转换。
方案二:利用Java位运算符,完成Unsigned转换。
正常情况下,Java提供的数据类型是有符号signed类型的,可以通过位运算的方式得到它们相对应的无符号值,参见几个方法中的代码:
public int getUnsignedByte (byte data){ //将data字节型数据转换为0~255 (0xFF 即BYTE)。
return data&0x0FF;
}
public int getUnsignedByte (short data){ //将data字节型数据转换为0~65535 (0xFFFF 即 WORD)。
return data&0x0FFFF;
}
public long getUnsignedIntt (int data){ //将int数据转换为0~4294967295 (0xFFFFFFFF即DWORD)。
return data&0x0FFFFFFFFl;
}
相关文章推荐
- 【WEB HTTP】集成点:网关、隧道及中继
- Linux网络编程之广播
- WebView加载本地加载网络资源
- 《Java程序设计》第三次作业:网络编程~
- 全零网络IP地址0.0.0.0表示意义详谈
- HTTP请求
- 网络安全实验室CTF练习部分题目(持续更新)
- tiny210 u-boot 网络ping不通主机解决方案
- httpclient 自己管理cookie
- yum 自动使用光盘和网络源
- win7无线WIFI网络怎么取消自动连接?
- Linux网络基础
- 对Socket的理解,Socket使用TCP/IP如何实现通信
- Linux 下curl模拟Http 的get or post请求
- http 状态代码表
- 黑马程序员——网络编程
- HttpClient4.3 第二次封装
- Android KitKat 4.4 Wifi移植AP模式和网络共享的调试日志
- 201506290818_《HTTP常用的方法》
- Laravel5.1学习笔记3 HTTP中间件