2017-04-01 53 views
-2

我有一个int数组int[] stegoBitsArray = {0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1...}我希望每个比特转换为字节并添加到字节数组我以后将转换为字符数组,因为01101100是字母“l”等就这么...所以我试图用的ByteBuffer但它抛出我BufferOverflowException这里是我的代码片段:JAVA阵列的字节阵列

int[] stegoBitsArray = getStegoTextFromImage(stegoImage); 
ByteBuffer byteBuffer = ByteBuffer.allocate(stegoBitsArray.length); 
for (int i = 0; i < stegoBitsArray.length; i++) { 
    byteBuffer.putInt(stegoBitsArray[i]); 
} 

,或者它更多更好地从int数组转换为字符?

+2

是'0110110001100001'一个**十进制数**仅包含0/1的数字,或者是一个**的二进制数**你写的二进制? –

+0

它是一个包含值0或1的数组 –

+0

如果要将8个“0”或“1”的int值转换为“byte”,则必须使用位操作(例如,使用'<<'和'|'运算符。没有库方法可以为你做,*你*必须编写代码来完成它。 --- *意见:* getStegoTextFromImage()是一种什么样的白痴方法,将* bits *作为int []'返回? * Yikes!* – Andreas

回答

0

你怎么能有一个像0110110001100001整数数组中的值。要么它可以存储为一个字符串或有另一种方式。

你可以有一个整数值的数组,如int array = {123,456,333}等等,然后你可以通过在数组上循环直接将这些整数转换成字符。

for(int i = 0; i < array.length; i++){ 
    char c = (char)array[i]; 
    System.out.println(c); 
} 

或者如果要将整数转换为二进制,则Java在Integer类中支持一种名为toBinaryString的方法。你可以找到一个好的资源HERE

这两个组合可以引导你到你想要的解决方案。

1

要将二进制转换为字符,必须将每个8位二进制转换为字节,然后才能将字节转换为字符。例如:

byte b = Byte.parseByte("01100001", 2); 
     System.out.println((char)b); 

打印

a