gpt4 book ai didi

java - 如何用Java在字节数组和位数组之间进行转换?

转载 作者:行者123 更新时间:2023-11-30 01:54:30 26 4
gpt4 key购买 nike

我有以下代码尝试在字节和位数组之间进行转换,但不知何故它没有正确转换,出了什么问题以及如何纠正它?

  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
[97, 98]

我期待着这个:

0110000101100010
[a, b]

最佳答案

如果您打算将数值显示为其相应的 ASCII 字符,则需要从 byte 转换为 char:

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));

要从 byte[] 转换为 String,您应该使用 new String(byte[]) 构造函数并指定正确的字符集。 Arrays.toString() 仅用于打印元素序列。

关于java - 如何用Java在字节数组和位数组之间进行转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54931319/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com