在java中将文本转换为二进制

在java中将文本转换为二进制,java,binary,Java,Binary,我想把字符串的每个字符都转换成一个新的二进制字符串。以下是我的工作: public static void main(String args[]) { String MESSAGE = "%"; String binaryResult = ""; for (char c : MESSAGE.toCharArray()){ binaryResult += Integer.toBinaryString( (int) c); } System.e

我想把字符串的每个字符都转换成一个新的二进制字符串。以下是我的工作:

public static void main(String args[]) {
    String MESSAGE = "%";
    String binaryResult = "";
    for (char c : MESSAGE.toCharArray()){
        binaryResult += Integer.toBinaryString( (int) c);
    }
    System.err.println(binaryResult);
}
例如,对于输入“%”,我得到以下输出:“100101” 我的问题是前导的“0”被删除。。。
我想要“0101”。有人有想法吗?

你真正想说的是“如何将一个字符的二进制字符串表示形式填充到7位”

替换此行:

binaryResult += Integer.toBinaryString( (int) c);
有了这些:

String binString = Integer.toBinaryString( (int) c );
binaryResult += ("0000000" + binString).substring(binString.length());

这假定您只有7位字符。。。如果您需要更多,请将0添加到“00000”字符串中,以匹配您想要的字符串长度(带填充的0)。

我建议对现有代码进行一些更改。由于在循环内连接到字符串,这将导致创建一组新的字符串对象,因为它们是不可变的。这个问题可以用一个简单的方法解决


请更清楚-为什么需要一个前导0?在二进制中,01001相当于1001。您的程序应该如何确定何时添加0?它应该一直是7位吗?这就是你要找的吗?事实上不是,因为我不想指定数字。如果有,我只想得到前导的0。你需要更清楚。给出一个输入和输出示例。描述你需要什么。默认情况下,二进制数没有前导数-这就像我们试图解析一个整数,将其改为00034而不是34。在什么情况下你需要用0填充结果?对不起,伙计们,我忘了指定我需要7位的表示是的,这是我的目标!我没说清楚。。。但是在字符“%”的情况下,binString变量的长度是6而不是7不?我的意思是,最多7位。尝试一下代码,看看它是否适合你。子字符串调用表示在本例中从char 6开始。。。这将导致字符串中包含7个字符。如果出于某种原因,您要包含需要8位或7位或其他内容,我认为不难找到您必须更改的
8
。)谢谢你的帮助,伙计:)
public static void main(String args[]) {
    String MESSAGE = "%";
    StringBuilder binaryResult = new StringBuilder();
    for (char c : MESSAGE.toCharArray()) {
        StringBuilder curValue = new StringBuilder(Integer.toBinaryString((int)c));

        // calculate padding 0 bits to fill to 8 bits
        int paddingLength = 8 - curValue.length();
        char[] paddingArr = new char[paddingLength];
        Arrays.fill(paddingArr, '0');

        // insert padding bytes to the front
        curValue.insert(0, paddingArr);

        // add to stringbuilder for `MESSAGE`
        binaryResult.append(curValue);
    }
    System.err.println(binaryResult.toString());
}