Java十六进制字符串转换说明
字符串的转换
变量在内存中的数据
Java代码
1 package com.example; 2 3 import java.nio.charset.StandardCharsets; 4 5 public class HelloWorld { 6 public static void main(String[] args) { 7 8 String var_str = "68656C6C6F776F726C64"; 9 10 //以字符串方式打印var_str中的内容 11 System.out.println("1.以字符串方式打印var_str中的内容,var_str:"); 12 System.out.format("%s",var_str); 13 System.out.println();System.out.println(); 14 15 //十六进制字符串转成十六进制字节数组, 两者在内存中的数据不同 16 System.out.println("2.十六进制字符串转成十六进制字节数组, 两者在内存中的数据不同,res:"); 17 byte[] res = hexString2Bytes(var_str); 18 for(int i=0;i<res.length;i++) { 19 System.out.format("%02X ",res[i]); 20 } 21 System.out.println();System.out.println(); 22 23 //十六进制字符串使用十六进制字节数据编码,两者在内存中的数据相同 24 System.out.println("3.十六进制字符串使用十六进制字节数据编码,两者在内存中的数据相同,res2=var_str.getBytes():"); 25 byte[] res2 = var_str.getBytes(); 26 for(int i=0;i<res2.length;i++) { 27 System.out.format("%02X ",res2[i]); 28 } 29 System.out.println();System.out.println(); 30 31 //将字符串转换成16进制字符串,两者在内存中的数据不同 32 System.out.println("4.字符串转换成16进制字符串,两者在内存中的数据不同,res3:"); 33 String res3 = strTo16(var_str); 34 System.out.format("%s",res3); 35 System.out.println();System.out.println(); 36 37 } 38 39 40 41 /** 42 * 十六进制字符串转十六进制字节数组 43 * */ 44 private static byte charToByte(char c) { 45 return (byte) "0123456789ABCDEF".indexOf(c); 46 } 47 public static byte[] hexString2Bytes(String hex) { 48 if ((hex == null) || (hex.equals(""))){ 49 return null; 50 } 51 else if (hex.length()%2 != 0){ 52 return null; 53 } 54 else{ 55 hex = hex.toUpperCase(); 56 int len = hex.length()/2; 57 byte[] b = new byte[len]; 58 char[] hc = hex.toCharArray(); 59 for (int i=0; i<len; i++){ 60 int p=2*i; 61 b[i] = (byte) (charToByte(hc[p]) << 4 | charToByte(hc[p+1])); 62 } 63 return b; 64 } 65 } 66 67 public static String strTo16(String s){ 68 String str=""; 69 for(int i=0;i<s.length();i++) { 70 int ch = (int)s.charAt(i); 71 String s4 = Integer.toHexString(ch); 72 str = str + s4; 73 } 74 return str; 75 } 76 77 }