特定
private int width = 400;
private byte [] data = new byte [2];
Run Code Online (Sandbox Code Playgroud)
我想将整数"width"分成两个字节,并用高字节加载数据[0],用低字节加载数据[1].
这是二进制值400 = 1 1001 0000因此数据[0]应包含0000 0001,数据[1]应包含1001 0000
Ste*_*202 81
使用简单的按位运算:
data[0] = (byte) (width & 0xFF);
data[1] = (byte) ((width >> 8) & 0xFF);
Run Code Online (Sandbox Code Playgroud)
这个怎么运作:
& 0xFF 除最低八位之外的所有掩码.>> 8 通过向右移动所有位8个位置来丢弃最低8位.int并返回a int,这是一个比它更大的数据类型byte.这种情况是安全的,因为所有非零位都适合byte.有关更多信息,请参阅转化和促销.编辑: Taylor L正确评论虽然>>在这种情况下工作,如果你将这个代码推广到四个字节(因为在Java中int是32位),它可能会产生不正确的结果.在这种情况下,最好使用>>>而不是>>.有关更多信息,请参阅Bitwise和Bit Shift运算符的Java教程.
sta*_*lue 11
对于转换两个字节,最干净的解决方案是
data[0] = (byte) width;
data[1] = (byte) (width >>> 8);
Run Code Online (Sandbox Code Playgroud)
为了将整数转换为四个字节,代码将是
data[0] = (byte) width;
data[1] = (byte) (width >>> 8);
data[2] = (byte) (width >>> 16);
data[3] = (byte) (width >>> 24);
Run Code Online (Sandbox Code Playgroud)
无论>>或>>>是否用于移位,由符号扩展创建的任何一个位都不会在结果字节中结束.
另见这个答案.
| 归档时间: |
|
| 查看次数: |
58003 次 |
| 最近记录: |