簡體   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