我有一个关于将字符串类型二进制数转换为位并写入txt文件的问题。
例如,我们有像“0101011”这样的字符串,想要转换为位类型“0101011”,然后写入磁盘上的文件。
我想知道是否有任何隐蔽的字符串到位..
我在网上搜索他们建议使用 bitarray 但我不确定
谢谢
尝试这个:
int value = Integer.parseInt("0101011", 2); // parse base 2
然后位模式value
将对应于字符串的二进制解释"0101011"
。然后,您可以将value
a 写入文件byte
(假设字符串不超过 8 个二进制数字)。
编辑您也可以使用Byte.parseByte("0101011", 2);
. 但是,Java 中的字节值始终是有符号的。如果您尝试解析设置了第 8 位的 8 位值(例如"10010110"
,即十进制的 150),您会得到 a NumberFormatException
,因为 +127 以上的值不适合 a byte
。如果您不需要处理大于 的位模式"01111111"
,则Byte.parseByte
与Integer.parseInt
.
不过,回想一下,要将一个字节写入文件,您使用OutputStream.write(int)
,它接受一个int
(不是byte
)值——即使它只写入一个字节。不妨从一个int
价值开始。
您可以尝试以下代码以避免数字溢出。
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
//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());