用1和0的字符串创建文本

时间:2017-03-11 20:02:11

标签: java

我目前正在使用QRCode扫描仪,并且已经达到了一段时间,我已经被困住了一段时间。

到目前为止我所拥有的是1s和0s的字符串,例如“100010100101 ....”。我接下来要做的是将此字符串转换为字节,总是分开8位。

使用这些字节我现在想用这个“ISO8859_1” Standart将它们解码成文本。

我的问题如下:我的结果是我想要的方式。这是我的代码:

for(int i = 0; i <= numberOfInt; i++){
        String character = "";
        for(int j = 0;j < 8; j++){
            boolean bool = tResult.remove(0); //tResult is a List of 1s & 0s
            if(bool){
                character = character + '1';
            }else{
                character = character + '0';
            }

        }       

        allcharacter[byteCounter] = (byte)Integer.parseInt(character,2);//I think this Line is where the mistake is. 
        byteCounter++; //Variable that counts where to put the next bit



    }
    String endresult ="";
    try {
        endresult = new String(allcharacter,"ISO8859_1");
    } catch (UnsupportedEncodingException e) {

        e.printStackTrace();
    } 
    return endresult;

我认为,转换为(byte)不会像我理解的那样工作,因此不同的字节被保存到数组中。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您可以使用String类的substring方法获取前8个字符,然后将这8个字符(将它们视为位)转换为字符(也是8位)。不是将每个字符解析为整数,然后将其转换为字节,您应该检查每个字符,并在每次达到1时将字节值乘以2.这样,您将获得0到255之间的值。每个字节,应该给你一个有效的字符。

另外,您可能需要检查Byte类及其方法,它可能有一个已经执行此操作的方法。

修改:There you go

编辑2:this问题也可以回答为什么你的int到字节转换没有给你想象的结果。

答案 1 :(得分:0)

好的,我很少使用字节,所以在这方面我没用。但是,我已经多次将二进制转换为字符串。它背后的逻辑是将二进制字符串转换为十进制int,然后从int转换为char,然后从char转换为string。我就是这样做的。

String list = "100111000110000111010011" //24 random binary digits for example
String output = "";
char letter = '';
int ascii = 0;
//Repeat while there is still something to read.
for(int i = 0; i < list.length(); i+=8){
    String temp = list.substring(i,i+8); //1 character in binary.
    for(int j = temp.length()-1; j >= 0; j--) //Convert binary to decimal
        if(temp.charAt(j) == '1')
            ascii += (int)Math.pow(2,j);
    letter = (char)ascii; //Sets the char letter to it's corresponding ascii value
    output = output + Character.toString(letter); //Adds the letter to the string
    ascii = 0; //resets ascii
}
System.out.println(output); //outputs the converted string

我希望你发现这有用!