如何使用Java在字节数组和位数组之间进行转换?
我有下面的代码试图在字节数组和位数组之间进行转换,但不知为什么转换不正确,有什么问题,如何更正如何使用Java在字节数组和位数组之间进行转换?,java,arrays,bit-manipulation,Java,Arrays,Bit Manipulation,我有下面的代码试图在字节数组和位数组之间进行转换,但不知为什么转换不正确,有什么问题,如何更正 String getBitsFromBytes(byte[] Byte_Array) // 129 { String Bits=""; for (int i=0;i<Byte_Array.length;i++) Bits+=String.format("%8s",Integer.toBinaryString(Byte_Array[i] &a
String getBitsFromBytes(byte[] Byte_Array) // 129
{
String Bits="";
for (int i=0;i<Byte_Array.length;i++) Bits+=String.format("%8s",Integer.toBinaryString(Byte_Array[i] & 0xFF)).replace(' ','0');
System.out.println(Bits); // 10000001
return Bits;
}
byte[] getBytesFromBits(int[] bits)
{
byte[] results=new byte[(bits.length+7)/8];
int byteValue=0;
int index;
for (index=0;index<bits.length;index++)
{
byteValue=(byteValue<<1)|bits[index];
if (index%8==7) results[index/8]=(byte)byteValue;
}
if (index%8!=0) results[index/8]=(byte)((byte)byteValue<<(8-(index%8)));
System.out.println(Arrays.toString(results));
return results;
}
...
String bit_string=getBitsFromBytes("ab".getBytes()); // 0110000101100010 : 01100001 + 01100010 --> ab
int[] bits=new int[bit_string.length()];
for (int i=0;i<bits.length;i++) bits[i]=Integer.parseInt(bit_string.substring(i,i+1));
getBytesFromBits(bits);
我期待着:
0110000101100010
[a, b]
如果要将数值显示为相应的ASCII字符,则需要将字节转换为字符:
char[] chars = new char[results.length];
for (int i = 0; i < results.length; i++) {
chars[i] = (char) results[i];
}
System.out.println(Arrays.toString(chars));
char[]chars=新字符[results.length];
for(int i=0;i
要从
字节[]
转换为字符串
,应使用新字符串(字节[])
构造函数并指定正确的字符集array.toString()
仅用于打印元素序列。位数组到底是什么?你指的是Java的位集吗?我想你得到了你所期望的,97是a的ascii数字,98是b的ascii数字。缺演员?
char[] chars = new char[results.length];
for (int i = 0; i < results.length; i++) {
chars[i] = (char) results[i];
}
System.out.println(Arrays.toString(chars));