我试图将大小为 4 的整数转换为字节数组,但它给了我奇怪的值。
byte[] bytes1 = my_int_to_bb_le(196,4); public static byte[] my_int_to_bb_le(int myInteger,int length) { return ByteBuffer.allocate(length).order(ByteOrder.LITTLE_ENDIAN).putInt(myInteger).array(); }
输出:-60 0 0 0
所需输出为:196 0 0 0
尝试了此代码的替代代码,但无法提供相同的输出
public static byte[] convertIntByteArray(int intval,int len) { byte[] intarray = new byte[len]; for(int i=0;i<len;i++) { if(i==0) { intarray[i]=(byte)intval; } else intarray[i]=0; } return intarray; }
输出:-60 0 0 0
所需输出为:196 0 0 0
谢谢
问问题
636 次
2 回答
3
那是因为,一个(有符号的)字节介于-128 to 127
public class TestNumber{
public static void main(String[] args){
byte b1 = -60;
int b2 = b1 & 0xFF;
System.out.println("Without casting "+ b1);
System.out.println("With casting "+b2);
System.out.println("Bitwise Trickery " + (b1 & 0xFF));
}
}
如果您想查看每个数字的位在内存中的排列方式,只需使用calc.exe
所有 Windows 操作系统提供的,更改view
为Programmer
,然后输入一个数字并查看其按位值。这就是我一直使用的按位运算:-)
于 2013-02-07T13:39:19.120 回答
0
您可以使用以下命令打印字节的无符号表示:
for( byte b : byteArray ) {
System.out.print((b & 0xFF )+" ");
}
但更常见的字节被打印为零填充的十六进制,以获得更舒适的查看格式:
for( byte b : byteArray ) {
System.out.format("%02X ", b);
}
于 2013-02-07T13:48:44.803 回答