如何在Java中将字符串的二进制表示转换为字节?

6

如标题所述,我该怎么做?将字符串转换为字节,然后转换为二进制字符串很容易,但是如何进行反向转换呢?下面是一个例子。

输出结果如下:

'f' 转换为二进制: 01100110 294984

我在某个地方读到可以使用Integer.parseInt函数,但很明显那不是这样的:(或者我做错了什么吗?

谢谢, :)

public class main{
    public static void main(String[] args) {

         String s = "f";
          byte[] bytes = s.getBytes();
          StringBuilder binary = new StringBuilder();
          for (byte b : bytes)
          {
             int val = b;
             for (int i = 0; i < 8; i++)
             {
                binary.append((val & 128) == 0 ? 0 : 1);
                val <<= 1;
             }
             binary.append(' ');
          }
          System.out.println("'" + s + "' to binary: " + binary);

        System.out.println(Integer.parseInt("01100110", 2));
    }
}

你迫切需要澄清你的需求。 - Hot Licks
3个回答

16

您可以使用 Byte.parseByte() ,并将进制设置为 2:

byte b = Byte.parseByte(str, 2);

使用你的示例:

System.out.println(Byte.parseByte("01100110", 2));

102

除了如果OP是真的想要将其转换为二进制文本字符串,否则不需要。 - Hot Licks
2
(尽管重新阅读,我们无法确定*OP想要什么。) - Hot Licks
4
当数值大于“01111111”(等于127)时,这种做法是行不通的,因为字节的取值范围是从-128到127。 - thomas.mc.work
@thomas.mc.work 没错,但是原帖只需要字节;请重新阅读问题。 - arshajii

1
您可以将其解析为二进制整数,然后转换为字节数组。在您的示例中,您有16位,也可以使用short。
short a = Short.parseShort(b, 2);
ByteBuffer bytes = ByteBuffer.allocate(2).putShort(a);

byte[] array = bytes.array();

万一你需要处理一个非常大的字符串,这可能会有所帮助。

String b = "0110100001101001";
byte[] bval = new BigInteger(b, 2).toByteArray();

除了如果OP是真的想要将其转换为二进制文本字符串,否则不需要。 - Hot Licks

0
我是这样做的,将一个字符串s转换为byte[],然后使用Integer.toBinaryString获取binaryStringRep。我使用Byte.parseByte将bianryStringRep转换为byte,并使用String(newByte[])将byte[]转换为String!希望它能帮助其他人,也帮助了我自己!^^
public class main{
    public static void main(String[] args) throws UnsupportedEncodingException {

         String s = "foo";
          byte[] bytes = s.getBytes();
          byte[] newBytes = new byte[s.getBytes().length];
          for(int i = 0; i < bytes.length; i++){
              String binaryStringRep = String.format("%8s", Integer.toBinaryString(bytes[i] & 0xFF)).replace(' ', '0');
              byte newByte = Byte.parseByte(binaryStringRep, 2);
              newBytes[i] = newByte;
          }

        String str = new String(newBytes, "UTF-8");
        System.out.println(str);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接