我有一个关于将字符串类型二进制数转换为位并在txt文件中写入的问题。
例如,我们有类似“0101011”的字符串,并希望转换为位类型“0101011” 然后写入磁盘上的文件。
我想知道无论如何要转换为字符串......
我在网上搜索他们建议使用bitarray,但我不确定
感谢
答案 0 :(得分:4)
试试这个:
int value = Integer.parseInt("0101011", 2); // parse base 2
然后value
中的位模式将对应于字符串"0101011"
的二进制解释。然后,您可以将value
作为byte
写入文件(假设字符串不超过8位二进制数字)。
编辑您还可以使用Byte.parseByte("0101011", 2);
。但是,Java中的字节值始终是有符号的。如果您尝试使用8 th 位设置解析8位值(如"10010110"
,即十进制150),则会得到NumberFormatException
因为上面的值+ 127不适合byte
。如果您不需要处理大于"01111111"
的位模式,那么Byte.parseByte
的工作方式与Integer.parseInt
一样。
回想一下,要将一个字节写入文件,可以使用OutputStream.write(int)
,它取int
(非byte
)值 - 即使它只写一个字节。不妨开始使用int
值。
答案 1 :(得分:0)
您可以尝试以下代码以避免数字溢出。
long avoidOverflows = Long.parseLong("11000000000000000000000000000000", 2);
int thisShouldBeANegativeNumber = (int) avoidOverflows;
System.out.println("Currect value : " + avoidOverflows + " -> " + "Int value : " + thisShouldBeANegativeNumber);
您可以看到输出
Currect value : 3221225472 -> Int value : -1073741824
答案 2 :(得分:0)
//Converting String to Bytes
bytes[] cipherText= new String("0101011").getBytes()
//Converting bytes to Bits and Convert to String
StringBuilder sb = new StringBuilder(cipherText.length * Byte.SIZE);
for( int i = 0; i < Byte.SIZE * cipherText .length; i++ )
sb.append((cipherText [i / Byte.SIZE] << i % Byte.SIZE & 0x80) == 0 ? '0' : '1');
//Byte code of input in Stirn form
System.out.println("Bytecode="+sb.toString()); // some binary data
//Convert Byte To characters
String bin = sb.toString();
StringBuilder b = new StringBuilder();
int len = bin.length();
int i = 0;
while (i + 8 <= len) {
char c = convert(bin.substring(i, i+8));
i+=8;
b.append(c);
}
//String format of Binary data
System.out.println(b.toString());