十六进制到二进制字符串Java

时间:2014-05-26 18:19:25

标签: java encryption binary hex

我正在进行加密,在第7步,我需要将HEX字符串数组(我已经从ASCII转换为字符串数组)转换为二进制字符串。

public static void main(String[] args)  { 
System.out.println("HEX to Binary: ");
String[] stringHextoBinary = new String[HS.length]; //HS is the String Array for Hex           numbers that i save from last step

StringBuilder builder = new StringBuilder();
int l = 0;
for(String s : HS) {
    builder.append(s);
    if (s.length()<=1){
       stringHextoBinary[l] = HexToBinary(s.charAt(0));
         l++;
   System.out.print(HexToBinary(s.charAt(0)) + ",");

 }else{
    stringHextoBinary[l] = HexToBinary(s.charAt(0))+HexToBinary(s.charAt(1));
        l++;
                   System.out.print(HexToBinary(s.charAt(0))+HexToBinary(s.charAt(1))+",");
 }              

 public static String HexToBinary(char Hex) {
            int i = Integer.parseInt(Character.toString(Hex), 16);
            String Bin = Integer.toBinaryString(i);
            return Bin;
      }                 
 }

当if语句有一位数或两位数时,它可以与HEX一起使用。 但我的问题在于它打印出来 HEX到Binary: 11100,111,111,10111,11101, 它输了0。 :(

这样当我加密单词“apple”,并用相同的代码解密它将返回单词“pppxl”:(

希望我能尽快得到答复,非常感谢!

4 个答案:

答案 0 :(得分:1)

使用Apache commons StringUtils class

的此方法
public String leftPad(String str, int size, char padding);

将您的号码转换为0和1后。它可能看起来像

String paddedBin = StringUtils.leftPad(bin, 8, '0');
例如,

。不确定你实际想要填充多少位数。

答案 1 :(得分:0)

您可以简单地使用字符串并使用以下内容将其转换为二进制文件,而不是您的方法接受字符:

public static void main(String[] args)  { 
System.out.println("HEX to Binary: ");
String[] stringHextoBinary = new String[HS.length]; //HS is the String Array for Hex           numbers that i save from last step

// creates the string builder, count, and declaration
StringBuilder builder = new StringBuilder();
int l = 0;
string binaryDigits;

// iterates through string array and appends to string that's being built
// (for whatever reason)
for(String s : HS) {
    builder.append(s);
    binaryDigits = HexToBinary(s);
    stringHextoBinary[l++] = binaryDigits;
    System.out.print(binaryDigits);
}

// transforms hex string to binary string without losing 0's
public static String HexToBinary(String Hex) {
    string toReturn = new BigInteger(Hex, 16).toString(2);
    return String.format("%" + (Hex.length*4) + "s", toReturn).replace(' ', '0')
}

您不需要组合代码,因为这是将字符串转换为由空格分隔的二进制字符串所需的所有代码。它将迭代并将每个字符串更改为二进制字符串。

答案 2 :(得分:0)

尝试此方法实现:

public static String hexCharToBinary(char c) {
    final int v;
    if (c >= '0' && c <= '9') {
        v = c - '0';
    } else if (c >= 'A' && c <= 'F') {
        v = 10 + c - 'A';
    } else if (c >= 'a' && c <= 'f') {
        v = 10 + c - 'a';
    } else {
        throw new IllegalArgumentException();
    }
    return String.format("%4s", Integer.toBinaryString(v & 0xFF)).replace(' ', '0');
}    

答案 3 :(得分:-2)

试试这个:

stringHextoBinary[l] = new BigInteger(s,16).toString(2);

这样做是为你的十六进制数创建一个基数为16的新Integer,然后将其转换为基数2(二进制)的字符串。没有测试过,因为我不在安装了jvm的电脑附近,但这只是一个想法,因为你似乎急需创意。

这也应该有效:

stringHextoBinary[l] = Integer.toBinaryString(Integer.parseInt(s, 16));