二进制到字节[]数组

时间:2015-02-25 19:21:22

标签: java

我将字节数组转换为二进制字符串。 然后,当我尝试将其从二进制字符串转换回字节数组时,它会产生与初始coverObjData略有不同的结果。

public class StandardLSB implements Stegano{
    private File coverObject;
    private String getBits(Byte b) {
        String result = "";
        for(int i=7;i>=0;--i)
            result += (b&(1<<i))==0 ? "0" : "1";
        return result;
    }

    private String getBits(byte b[]) {
        String result = "";
        for(int i=0;i<b.length;++i)
            result += getBits(b[i]);
        return result;
    }    

    public static void main(String args[]){
        byte[] coverObjData = Files.readAllBytes(coverObject.toPath());
        String coverBits = getBits(coverObjData);
        byte[] stegoData = new BigInteger(coverBits.toString(), 2).toByteArray();
    }
}

记事本中的初始coverObjData看起来像这样:

ffd8 ffe1 1683 4578 6966 0000 4949 2a00
0800 0000 0f00 0001 0300 0100 0000 8002
...
...
3a80 907d 971f 8f7f d593 6b4c 81da b8a0
bb15 762a 85d4 e710 584f 2568 4290 0fb9
d87e bc

stegodata在记事本中看起来像这样:

00ff d8ff e116 8345 7869 6600 0049 492a
0008 0000 000f 0000 0103 0001 0000 0080
...
...
fa3a 8090 7d97 1f8f 7fd5 936b 4c81 dab8
a0bb 1576 2a85 d4e7 1058 4f25 6842 900f
b9d8 7e

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

您可以简单地使用带有字节数组的构造函数:

public static void main(String args[]){
    byte[] coverObjData = Files.readAllBytes(coverObject.toPath());
    byte[] stegoData = new BigInteger(coverObjData).toByteArray();
}