如何使Integer.toBinaryString返回至少4位

时间:2012-08-03 23:23:42

标签: java binary decimal

我正在编写一种方法,我将int值转换为二进制字符串并存储它们。我使用Integer.toBinaryString方法这样做,并且它正常工作,但问题是我需要方法返回字符串中的4位而不是更少(它永远不会更多因为数字不够大)。以下是我的代码示例以及问题发生的位置:

int value5 = 3;
String strValue5 = Integer.toBinaryString(value5);
for(int index = 0; index < 4; index++){
     sBoxPostPass[4][index] = strVal5.charAt(index);
}

显然,这将抛出一个ArrayOutOfBoundsException,因为strValue5 == 11而不是0011,就像它需要的那样。我希望这很清楚。在此先感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

返回至少4位数的技巧是一个5位数字并切断第一位数字。

String strValue5 = Integer.toBinaryString(value5 + 0b10000).substring(1);

答案 1 :(得分:2)

我不保证这是最有效的方法,但是您总是可以创建自己的方法来调用Integer.toBinaryString并对其进行适当的格式化:

public static String toBinaryStringOfLength(int value, int length) {
    String binaryString = Integer.toBinaryString(value); 
    StringBuilder leadingZeroes = new StringBuilder();
    for(int index = 0; index < length - binaryString.length(); index++) {
        leadingZeroes = leadingZeroes.append("0");
    }

    return leadingZeroes + binaryString;
}

请记住,我没有说明您发送的值需要更多位来表示二进制文件而不是您提供的长度的情况。

答案 2 :(得分:1)

如果您的值总是恰好有4位,那么这个值足够小,可以使用查找表来查询16个值。纠正我的Java中的任何错误都留给读者练习。

static String binary4[16] = {"0000", /* another exercise for the reader */, "1111"};
static String toBinary4(int value) {
    return binary4[value & 0xF];
}