java 实现字符串与16进制转换(含中文)的方法
一、意义
通过实现字符串与16进制转换(含中文)方法,可以方便地对字符串进行各种转换操作,提高了字符串处理的灵活性。
二、方法
public class EString3 {
//字符串转16进制(包含中文)
public static String convertStringToHex(String str) {
char[] chars = "0123456789ABCDE".toCharArray();//toCharArray() 方法将字符串转换为字符数组。
StringBuilder sb = new StringBuilder(""); //StringBuilder是一个类,可以用来处理字符串,sb.append()字符串相加效率高
byte[] bs = str.getBytes();//String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组
int bit;
for (int i = 0; i < bs.length; i++) {
bit = (bs[i] & 0x0f0) >> 4; // 高4位, 与操作 1111 0000
sb.append(chars[bit]);
bit = bs[i] & 0x0f; // 低四位, 与操作 0000 1111
sb.append(chars[bit]);
}
return sb.toString().trim();
}
//16进制转字符串(包含中文)
public static String convertHexToString(String hexStr) {
hexStr = hexStr.toUpperCase();
String str = "0123456789ABCDEF"; //16进制能用到的所有字符 0-15
char[] hexs = hexStr.toCharArray();//toCharArray() 方法将字符串转换为字符数组。
int length = (hexStr.length() / 2);//1个byte数值 -> 两个16进制字符
byte[] bytes = new byte[length];
int n;
for (int i = 0; i < bytes.length; i++) {
int position = i * 2;//两个16进制字符 -> 1个byte数值
n = str.indexOf(hexs[position]) * 16;
n += str.indexOf(hexs[position + 1]);
// 保持二进制补码的一致性 因为byte类型字符是8bit的 而int为32bit 会自动补齐高位1 所以与上0xFF之后可以保持高位一致性
//当byte要转化为int的时候,高的24位必然会补1,这样,其二进制补码其实已经不一致了,&0xff可以将高的24位置为0,低8位保持原样,这样做的目的就是为了保证二进制数据的一致性。
bytes[i] = (byte) (n & 0xff);
}
return new String(bytes);
}
}
三、使用例子
public static void main(String[] args) {
String ce1 = "12345,上山打老虎,lhbzj,看到小王八";
String ce2 = convertStringToHex("12345,上山打老虎,lhbzj,看到小王八");
String ce3 = convertHexToString(ce2);
System.out.println(ce2);
System.out.println(ce3);
}
输出:
31323334352CE4B88AE5B1B1E68993E88081E8998EEFBC8C6C68627A6A2CE79C8BE588B0E5B08FE78E8BE585AB
12345,上山打老虎,lhbzj,看到小王八
四、结尾
本方法经过本人多次分析与测试,如有更好的方法或者发现错误的地方欢迎大家评论与指正!