我目前正在使用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)不会像我理解的那样工作,因此不同的字节被保存到数组中。
感谢您的帮助。
答案 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
我希望你发现这有用!