Преобразование строки в шестнадцатеричный в Java - PullRequest
102 голосов
/ 29 мая 2009

Я пытаюсь преобразовать строку типа «testing123» в шестнадцатеричной форме в Java. В настоящее время я использую BlueJ.

И чтобы преобразовать его обратно, это то же самое, что и назад?

Ответы [ 20 ]

5 голосов
/ 11 июня 2012

Для получения целочисленного значения hex

        //hex like: 0xfff7931e to int
        int hexInt = Long.decode(hexString).intValue();
3 голосов
/ 02 апреля 2015

Сначала преобразуйте его в байты с помощью функции getBytes (), а затем преобразуйте в шестнадцатеричный код, используя следующее:

private static String hex(byte[] bytes) {
    StringBuilder sb = new StringBuilder();
    for (int i=0; i<bytes.length; i++) {
        sb.append(String.format("%02X ",bytes[i]));
    }
    return sb.toString();
}
3 голосов
/ 18 октября 2014

Чтобы пойти другим путем (шестнадцатеричное в строку), вы можете использовать

public String hexToString(String hex) {
    return new String(new BigInteger(hex, 16).toByteArray());
}
1 голос
/ 16 сентября 2015
new BigInteger(1, myString.getBytes(/*YOUR_CHARSET?*/)).toString(16)
1 голос
/ 01 августа 2012
import java.io.*;
import java.util.*;

public class Exer5{

    public String ConvertToHexadecimal(int num){
        int r;
        String bin="\0";

        do{
            r=num%16;
            num=num/16;

            if(r==10)
            bin="A"+bin;

            else if(r==11)
            bin="B"+bin;

            else if(r==12)
            bin="C"+bin;

            else if(r==13)
            bin="D"+bin;

            else if(r==14)
            bin="E"+bin;

            else if(r==15)
            bin="F"+bin;

            else
            bin=r+bin;
        }while(num!=0);

        return bin;
    }

    public int ConvertFromHexadecimalToDecimal(String num){
        int a;
        int ctr=0;
        double prod=0;

        for(int i=num.length(); i>0; i--){

            if(num.charAt(i-1)=='a'||num.charAt(i-1)=='A')
            a=10;

            else if(num.charAt(i-1)=='b'||num.charAt(i-1)=='B')
            a=11;

            else if(num.charAt(i-1)=='c'||num.charAt(i-1)=='C')
            a=12;

            else if(num.charAt(i-1)=='d'||num.charAt(i-1)=='D')
            a=13;

            else if(num.charAt(i-1)=='e'||num.charAt(i-1)=='E')
            a=14;

            else if(num.charAt(i-1)=='f'||num.charAt(i-1)=='F')
            a=15;

            else
            a=Character.getNumericValue(num.charAt(i-1));
            prod=prod+(a*Math.pow(16, ctr));
            ctr++;
        }
        return (int)prod;
    }

    public static void main(String[] args){

        Exer5 dh=new Exer5();
        Scanner s=new Scanner(System.in);

        int num;
        String numS;
        int choice;

        System.out.println("Enter your desired choice:");
        System.out.println("1 - DECIMAL TO HEXADECIMAL             ");
        System.out.println("2 - HEXADECIMAL TO DECIMAL              ");
        System.out.println("0 - EXIT                          ");

        do{
            System.out.print("\nEnter Choice: ");
            choice=s.nextInt();

            if(choice==1){
                System.out.println("Enter decimal number: ");
                num=s.nextInt();
                System.out.println(dh.ConvertToHexadecimal(num));
            }

            else if(choice==2){
                System.out.println("Enter hexadecimal number: ");
                numS=s.next();
                System.out.println(dh.ConvertFromHexadecimalToDecimal(numS));
            }
        }while(choice!=0);
    }
}
0 голосов
/ 30 марта 2019

проверьте это решение для строки в гекс и гекса в строку наоборот

public class TestHexConversion {
public static void main(String[] args) {
    try{
        String clearText = "testString For;0181;with.love";
        System.out.println("Clear Text  = " + clearText);
        char[] chars = clearText.toCharArray();
        StringBuffer hex = new StringBuffer();
        for (int i = 0; i < chars.length; i++) {
            hex.append(Integer.toHexString((int) chars[i]));
        }
        String hexText = hex.toString();
        System.out.println("Hex Text  = " + hexText);
        String decodedText = HexToString(hexText);
        System.out.println("Decoded Text = "+decodedText);
    } catch (Exception e){
        e.printStackTrace();
    }
}

public static String HexToString(String hex){

      StringBuilder finalString = new StringBuilder();
      StringBuilder tempString = new StringBuilder();

      for( int i=0; i<hex.length()-1; i+=2 ){
          String output = hex.substring(i, (i + 2));
          int decimal = Integer.parseInt(output, 16);
          finalString.append((char)decimal);
          tempString.append(decimal);
      }
    return finalString.toString();
}

Выводится следующим образом:

Clear Text = testString For; 0181; with.love

Hex Text = 74657374537472696e6720466f723b303138313b776974682e6c6f7665

Декодированный текст = testString For; 0181; with.love

0 голосов
/ 31 июля 2018

Короткий и удобный способ преобразования строки в ее шестнадцатеричное представление:

public static void main(String... args){
String str = "Hello! This is test string.";
char ch[] = str.toCharArray();
StringBuilder sb = new StringBuilder();
    for (int i = 0; i < ch.length; i++) {
        sb.append(Integer.toHexString((int) ch[i]));
    }
    System.out.println(sb.toString());
}
0 голосов
/ 18 октября 2016

Вот некоторые тесты , сравнивающие различные подходы и библиотеки. Гуава превосходит кодек Apache Commons при декодировании. Кодек Commons превосходит Guava при кодировании. И JHex превосходит их как для декодирования, так и для кодирования.

JHex пример

String hexString = "596f752772652077656c636f6d652e";
byte[] decoded = JHex.decodeChecked(hexString);
System.out.println(new String(decoded));
String reEncoded = JHex.encode(decoded);

Все в файле одного класса для JHex . Не стесняйтесь копировать вставку, если вы не хотите, чтобы в вашем дереве зависимостей была еще одна библиотека. Также обратите внимание, что он доступен только как Java 9 jar, пока я не смогу понять, как публиковать несколько целей выпуска с помощью Gradle и плагина Bintray.

0 голосов
/ 15 декабря 2015

Преобразовать строку в шестнадцатеричный :

public String hexToString(String hex) {
    return Integer.toHexString(Integer.parseInt(hex));
}

определенно это легкий путь.

0 голосов
/ 05 июня 2012

Гораздо лучше:

public static String fromHexString(String hex, String sourceEncoding ) throws  IOException{
    ByteArrayOutputStream bout = new ByteArrayOutputStream();
    byte[] buffer = new byte[512];
    int _start=0;
    for (int i = 0; i < hex.length(); i+=2) {
        buffer[_start++] = (byte)Integer.parseInt(hex.substring(i, i + 2), 16);
        if (_start >=buffer.length || i+2>=hex.length()) {
            bout.write(buffer);
            Arrays.fill(buffer, 0, buffer.length, (byte)0);
            _start  = 0;
        }
    }

    return  new String(bout.toByteArray(), sourceEncoding);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...