繁体   English   中英

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

[英]Hex to Binary String Java

我现在正在进行加密,在步骤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一起使用。 但是我的问题是,它将十六进制输出到Binary:11100,111,111,10111,11101,其中丢失了0。 :(

这样,当我加密单词“ apple”并用相同的代码解密时,单词“ pppxl”就会回来:(

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

使用Apache Commons StringUtils类的此方法

public String leftPad(String str, int size, char padding);

将数字转换为0和1后。 它可能看起来像

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

例如。 不确定您实际要填充多少位数。

您可以简单地让它接受一个字符串并将其转换为二进制,而不是使用char的方法:

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')
}

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

试试这个方法实现:

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');
}    

试试看:

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

这样做是为您的十六进制数字创建一个新的整数,其基数为16,然后将其转换为以2为底的字符串(二进制)。 由于我不在安装了jvm的计算机附近,因此尚未进行测试,但这只是个主意,因为您似乎急需一些主意。

这也应该工作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM