toHexString
public static String toHexString(int i) returns the string representation of an integer parameter in hexadecimal unsigned integer form.
If the argument is negative, the unsigned integer value is the argument plus 232; otherwise it is equal to the argument. Converts the value to a hexadecimal (base 16) ASCII numeric string without leading zeros. If the unsigned size value is zero, it is represented by a zero character '0' ('/u0030'); otherwise, the first character in the unsigned size representation will not be a zero character. Use the following characters as hexadecimal numbers:
0123456789abcdef
These characters range from '/u0030' to '/u0039' and from '/u0061' to '/u0066'. If you want uppercase letters, you can call the String.toUpperCase() method on the result:
Integer.toHexString(n).toUpperCase()
parameter:
i - the integer to be converted to a string.
return:
A string representation of an unsigned integer value expressed in hexadecimal (base 16) arguments.
//Convert string to hexadecimal encoding
public static String toHexString(String s)
{
String str="";
for (int i=0;i<s.length();i++)
{
int ch = (int)s.charAt(i);
String s4 = Integer.toHexString(ch);
str = str + s4;
}
return str;
}
// Convert hexadecimal encoding to string
public static String toStringHex(String s)
{
byte[] baKeyword = new byte[s.length()/2];
for(int i = 0; i < baKeyword.length; i++)
{
try
{
baKeyword[i] = (byte)(0xff & Integer.parseInt(s.substring(i*2, i*2+2),16));
}
catch(Exception e)
{
e.printStackTrace();
}
}
try
{
s = new String(baKeyword, "utf-8");//UTF-16le:Not
}
catch (Exception e1)
{
e1.printStackTrace();
}
return s;
}
// Convert hexadecimal encoding to string
public static String toStringHex(String s)
{
byte[] baKeyword = new byte[s.length()/2];
for(int i = 0; i < baKeyword.length; i++)
{
try
{
baKeyword[i] = (byte)(0xff & Integer.parseInt(s.substring(i*2, i*2+2),16));
}
catch(Exception e)
{
e.printStackTrace();
}
}
try
{
s = new String(baKeyword, "utf-8");//UTF-16le:Not
}
catch (Exception e1)
{
e1.printStackTrace();
}
return s;
}
public static void main(String[] args) {
System.out.println(encode("中文"));
System.out.println(decode(encode("中文")));
}
/*
* Hexadecimal numeric character set
*/
private static String hexString="0123456789ABCDEF";
/*
* Encode strings into hexadecimal numbers, suitable for all characters (including Chinese)
*/
public static String encode(String str)
{
//Get the byte array based on the default encoding
byte[] bytes=str.getBytes();
StringBuilder sb=new StringBuilder(bytes.length*2);
//Decompose each byte in the byte array into a 2-digit hexadecimal integer
for(int i=0;i<bytes.length;i++)
{
sb.append(hexString.charAt((bytes[i]&0xf0)>>4));
sb.append(hexString.charAt((bytes[i]&0x0f)>>0));
}
return sb.toString();
}
/*
* Decode hexadecimal numbers into strings, applicable to all characters (including Chinese)
*/
public static String decode(String bytes)
{
ByteArrayOutputStream baos=new ByteArrayOutputStream(bytes.length()/2);
//Assemble each 2-digit hexadecimal integer into one byte
for(int i=0;i<bytes.length();i+=2)
baos.write((hexString.indexOf(bytes.charAt(i))<<4 |hexString.indexOf(bytes.charAt(i+1))));
return new String(baos.toByteArray());
}
Second method:
Print the specified byte array to the console in hexadecimal form
public class Util {
public Util() {
}
/**
* Print the specified byte array to the console in hexadecimal form
* @param hint String
* @param b byte[]
* @return void
*/
public static void printHexString(String hint, byte[] b) {
System.out.print(hint);
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
System.out.print(hex.toUpperCase() + " ");
}
System.out.println("");
}
/**
*
* @param b byte[]
* @return String
*/
public static String Bytes2HexString(byte[] b) {
String ret = "";
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
ret += hex.toUpperCase();
}
return ret;
}
/**
* Combine two ASCII characters into one byte;
* Such as: "EF"--> 0xEF
* @param src0 byte
* @param src1 byte
* @return byte
*/
public static byte uniteBytes(byte src0, byte src1) {
byte _b0 = Byte.decode("0x" + new String(new byte[]{src0})).byteValue();
_b0 = (byte)(_b0 << 4);
byte _b1 = Byte.decode("0x" + new String(new byte[]{src1})).byteValue();
byte ret = (byte)(_b0 ^ _b1);
return ret;
}
/**
* Convert the specified string src into hexadecimal form by dividing every two characters
* For example: "2B44EFD9" --> byte[]{0x2B, 0x44, 0xEF, 0xD9}
* @param src String
* @return byte[]
*/
public static byte[] HexString2Bytes(String src){
byte[] ret = new byte[8];
byte[] tmp = src.getBytes();
for(int i=0; i<8; i++){
ret[i] = uniteBytes(tmp[i*2], tmp[i*2+1]);
}
return ret;
}
}