java 16进制与字符串直接相互转换

java 16进制与字符串直接相互转换

CreationTime--2018年7月12日09点39分

Author:Marydon

1.16进制转换成字符串

/**
 * 16进制直接转换成为字符串
 * @explain
 * @param hexStr 16进制字符串
 * @return String
 */
public static String fromHexString(String hexString) {
    // 用于接收转换结果
    String result = "";
    // 转大写
    hexString = hexString.toUpperCase();
    // 16进制字符
    String hexDigital = "0123456789ABCDEF";
    // 将16进制字符串转换成char数组
    char[] hexs = hexString.toCharArray();
    // 能被16整除,肯定可以被2整除
    byte[] bytes = new byte[hexString.length() / 2];
    int n;

    for (int i = 0; i < bytes.length; i++) {
        n = hexDigital.indexOf(hexs[2 * i]) * 16 + hexDigital.indexOf(hexs[2 * i + 1]);
        bytes[i] = (byte) (n & 0xff);
    }
    // byte[]-->String
    result = new String(bytes);
    return result;
}

2.字符串转换成大写的16进制字符串

/**
 * 字符串转换成为16进制字符串(大写)
 * @explain 因为java转义字符串在java中有着特殊的意义,
 *     所以当字符串中包含转义字符串,并将其转换成16进制后,16进制再转成String时,会出问题:
 *  java会将其当做转义字符串所代表的含义解析出来
 * @param str 字符串(去除java转义字符)
 * @return 16进制字符串
 * @throws Exception
 */
public static String toHexString(String str) throws Exception {
    // 用于接收转换结果
    String hexString = "";
    // 1.校验是否包含特殊字符内容
    // java特殊转义符
    // String[] escapeArray = {"\b","\t","\n","\f","\r","\‘","\"","\\"};
    String[] escapeArray = {"\b","\t","\n","\f","\r"};
    // 用于校验参数是否包含特殊转义符
    boolean flag = false;
    // 迭代
    for (String esacapeStr : escapeArray) {
        // 一真则真
        if (str.contains(esacapeStr)) {
            flag = true;
            break;// 终止循环
        }
    }
    // 包含特殊字符
    if (flag) throw new Exception("参数字符串不能包含转义字符!");

    // 16进制字符
    char[] hexArray = {‘0‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘,‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘};
    StringBuilder sb = new StringBuilder();
    // String-->byte[]
    byte[] bs = str.getBytes();
    int bit;
    for (int i = 0; i < bs.length; i++) {
        bit = (bs[i] & 0x0f0) >> 4;
        sb.append(hexArray[bit]);
        bit = bs[i] & 0x0f;
        sb.append(hexArray[bit]);
    }
    hexString = sb.toString();
    return hexString;
}

3.测试

/**
 *
 * @explain
 * @param args
 * @throws Exception
 */
public static void main(String[] args) throws Exception {
    // 其中,\‘\"\\ 实际字符串代表:‘"\
    String str = "张三&$李四((、,//\‘\"\\‘’“”+-*/!!~.。=——??;;";
    String hexStr = toHexString(str);
    System.out.println(hexStr);
    System.out.println(fromHexString(hexStr));
}

相关推荐:

原文地址:https://www.cnblogs.com/Marydon20170307/p/9297917.html

时间: 2024-12-25 19:31:54

java 16进制与字符串直接相互转换的相关文章

java 16进制转与汉字相互转换

这个程序非常小,就是一个十六进制与汉字的相互转换,记录下来以后可能用得到 好,直接看代码: 1 public static void main(String[] args) { 2 String ss = "\u6570\u636e\u672a\u5f55\u5165"; 3 System.out.println(ss+"--"); 4 System.out.println(toUnicode("数据未录入")); 5 } 6 public st

java 16进制转换10进制

public static String toHexString2(byte[] b) { StringBuffer buffer = new StringBuffer(); for (int i = 0; i < b.length; ++i) { buffer.append(toHexString2(b[i])); } return buffer.toString(); } public static String toHexString2(byte b) { char[] buffer =

C# 16进制与字符串、字节数组之间的转换

1.请问c#中如何将十进制数的字符串转化成十六进制数的字符串 //十进制转二进制 Console.WriteLine("十进制166的二进制表示: "+Convert.ToString(166, 2)); //十进制转八进制 Console.WriteLine("十进制166的八进制表示: "+Convert.ToString(166, 8)); //十进制转十六进制 Console.WriteLine("十进制166的十六进制表示: "+Con

C# 16进制与字符串、字节数组之间的转换(转)

1.请问c#中如何将十进制数的字符串转化成十六进制数的字符串   //十进制转二进制 Console.WriteLine("十进制166的二进制表示: "+Convert.ToString(166, 2)); //十进制转八进制 Console.WriteLine("十进制166的八进制表示: "+Convert.ToString(166, 8)); //十进制转十六进制 Console.WriteLine("十进制166的十六进制表示: "+C

C#串口通讯,16进制与字符串、字节数组之间的转换。

1.将十进制数的字符串转化成十六进制数的字符串 //十进制转二进制Console.WriteLine("十进制166的二进制表示: "+Convert.ToString(166, 2));//十进制转八进制Console.WriteLine("十进制166的八进制表示: "+Convert.ToString(166, 8));//十进制转十六进制Console.WriteLine("十进制166的十六进制表示: "+Convert.ToStrin

16进制的字符串转化为utf-8格式的字符串

/** * 16进制的字符串转化为utf-8格式的字符串 * @param s * @return */ 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.subst

js小工具.字符串&amp;16进制数值字符串&amp;互转

1. 2.测试代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script type="text/javascript" > <!-- window.onload = function() { // var strTest = "1234567"; // strTest = strTest.substr(2); /

Java中byte与(16进制)字符串的互相转换

java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示,所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果new String(H) + new String(L).即byte用十六进制表示只占2位. 同理,相反的转换也是将两个16进制字符转换成一个byte,原理同上. 根据以上原理,我们就可以将byte[] 数组转换为16进制字符串了,当

16进制和字符串(包括中文)的转换

package XXXX; import java.io.ByteArrayOutputStream; /** * Description  字符串(包含中文)和16进制之间的转换 */ public class CodeChange { /** * 16进制数字字符集 */ private static String hexString="0123456789ABCDEF"; public static void main(String[] args) { System.out.pr