在java中将字符串类型二进制数转换为位

时间:2012-12-04 00:39:21

标签: java bit bits bitarray

我有一个关于将字符串类型二进制数转换为位并在txt文件中写入的问题。

例如,我们有类似“0101011”的字符串,并希望转换为位类型“0101011” 然后写入磁盘上的文件。

我想知道无论如何要转换为字符串......

我在网上搜索他们建议使用bitarray,但我不确定

感谢

3 个答案:

答案 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());