Converting A String To Hexadecimal In Java

前端 未结 21 2263
青春惊慌失措
青春惊慌失措 2020-11-22 09:55

I am trying to convert a string like \"testing123\" into hexadecimal form in java. I am currently using BlueJ.

And to convert it back, is it the same thing except b

相关标签:
21条回答
  • 2020-11-22 10:17

    First convert it into bytes using getBytes() function and then convert it into hex usign this :

    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();
    }
    
    0 讨论(0)
  • 2020-11-22 10:19

    Convert String to Hexadecimal:

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

    definitely this is the easy way.

    0 讨论(0)
  • 2020-11-22 10:19

    A short and convenient way to convert a String to its Hexadecimal notation is:

    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 讨论(0)
  • 2020-11-22 10:23

    Much better:

    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);
    }
    
    0 讨论(0)
  • 2020-11-22 10:24

    Use DatatypeConverter.printHexBinary():

    public static String toHexadecimal(String text) throws UnsupportedEncodingException
    {
        byte[] myBytes = text.getBytes("UTF-8");
    
        return DatatypeConverter.printHexBinary(myBytes);
    }
    

    Example usage:

    System.out.println(toHexadecimal("Hello StackOverflow"));
    

    Prints:

    48656C6C6F20537461636B4F766572666C6F77
    

    Note: This causes a little extra trouble with Java 9 and newer since the API is not included by default. For reference e.g. see this GitHub issue.

    0 讨论(0)
  • 2020-11-22 10:24

    check this solution for String to hex and hex to String vise-versa

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

    Output as follows :

    Clear Text = testString For;0181;with.love

    Hex Text = 74657374537472696e6720466f723b303138313b776974682e6c6f7665

    Decoded Text = testString For;0181;with.love

    0 讨论(0)
提交回复
热议问题