您的位置:首页 > 理论基础 > 计算机网络

字节数组&无符号&网络序字节序

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: