我有一个关于将字符串类型的二进制数字转换为位并写入txt文件的问题。将字符串类型的二进制数字转换为java中的位
例如,我们有像“0101011”这样的字符串,并希望转换为位型“0101011” ,然后写入磁盘上的文件。
我想知道,反正是有隐蔽到串位..
我正在寻找在网络上,他们建议使用bitarray,但我不知道
感谢
我有一个关于将字符串类型的二进制数字转换为位并写入txt文件的问题。将字符串类型的二进制数字转换为java中的位
例如,我们有像“0101011”这样的字符串,并希望转换为位型“0101011” ,然后写入磁盘上的文件。
我想知道,反正是有隐蔽到串位..
我正在寻找在网络上,他们建议使用bitarray,但我不知道
感谢
尝试这样的:
int value = Integer.parseInt("0101011", 2); // parse base 2
然后在value
位模式将对应于字符串的二进制解释210。然后,您可以将value
作为byte
写入文件(假定字符串不超过8个二进制数字)。
编辑你也可以使用Byte.parseByte("0101011", 2);
。但是,Java中的字节值始终是有符号的。如果你试图用8个位组解析的8位值(如"10010110"
,这是150十进制),你会得到一个NumberFormatException
因为上述+127值不会在byte
适合。如果您不需要处理大于"01111111"
的位模式,则Byte.parseByte
的工作方式与Integer.parseInt
一样。
回想一下,虽然,写入文件的字节,使用OutputStream.write(int)
,这需要一个int
(不byte
)值—即使只写一个字节。不妨先用int
值开始。
为什么不'Byte.parseByte'? – arshajii
@ A.R.S。 - 这也会起作用,除非你无法用第8位设置解析字节值。此外,向OutputStream写入一个字节需要一个int参数(尽管它只会写入一个字节)。我通常只是用'int'开始,尽管使用'Byte.parseByte()'确实有一个“自我记录”的方面。 –
您可以尝试下面的代码以避免数字溢出。
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
我想将字符串类型的二进制数字“010101”转换为位型 –
@DcRedwing你是什么意思'位类型'?你的意思是*字节*? – arshajii
我的上述答案对于将大数转换为正确的十进制格式没有任何溢出很有用。 –
//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());
是否要写入文本“0101011”的文件,或者你想要写字节0101011? –
如果我们只是写“010101”到文件,我猜测它是字符串类型的文件,所以它比位需要更多的空间。因此,在java文件中,我们得到字符串类型的二进制数字“010101”,然后转换为位类型,然后我想写入文件.. –