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

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

Author:Marydon

1.16进制转换成字符串

/**

* 16进制直接转换成为字符串

* @explain

* @param hexStr 16进制字符串

* @return String (字符集:UTF-8)

*/

public static String fromHexString(String hexString) throws Exception {

// 用于接收转换结果

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, "UTF-8");

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

*@paramargs

*@throwsException*/

public static void main(String[] args) throwsException {//其中,\'\"\\ 实际字符串代表:'"\

String str = "张三&$李四((、,//\'\"\\‘’“”+-*/!!~.。=——??;;";

String hexStr=toHexString(str);

System.out.println(hexStr);

System.out.println(fromHexString(hexStr));

}

4.说明

要想将特殊转义符当作字符串来正常解析,需要自己再手动进行转义,比如:

//输出\\

String str = "\\\\";

String hexStr=toHexString(str);

System.out.println(hexStr);

System.out.println(fromHexString(hexStr));//输出\n

str = "\\n";

hexStr=toHexString(str);

System.out.println(hexStr);

System.out.println(fromHexString(hexStr));

toHexString()方法中,调用的contains(param)方法,不需要转义,而是将param当作纯字符串来解析,所以能校验通过!

java字符转换成16进制_java 16进制与字符串直接相互转换相关推荐

  1. java 时间转换成字符串_java 获得系统时间 转换成字符串

    1.long字符串转换成yyyy-MM-dd HH:mm:ss 格式输出 /** * 将长时间格式字符串转换为字符串 yyyy-MM-dd HH:mm:ss * @return */ public s ...

  2. 考研数据结构之串(4.4)——练习题之将串str中所有值为ch1的字符转换成ch2的字符(C表示)

    题目 将串str中所有值为ch1的字符转换成ch2的字符,如果str为空串,或者串中不含值为ch1的字符,则什么都不做. 分析 扫描整个串,发现值为ch1的字符用值为ch2的字符覆盖即可. 代码 核心 ...

  3. 【引用】在Eclipse中将java Project转换成Dynamic Web Project

    编辑工程的.project文件: 添加 <nature>org.eclipse.wst.common.project.facet.core.nature</nature> &l ...

  4. mysql将字符转换成数字

    在操作mysql时,经常需要将字符转换成数字,这一步虽然简单,但不常用的话也很容易忘记,现将在网上找到的方法记录如下: 1.将字符的数字转成数字,比如'0'转成0可以直接用加法来实现 例如:将pony ...

  5. 带毫秒的字符转换成时间(DateTime)格式的通用方法

    C#自身有更好的方式,Net任意String格式转换为DateTime类型 ====================================================== 原文 ==== ...

  6. 将扫描字符转换成点阵信息

    ➤ 00转换字符 在2020年秋季学期人工神经网络课程中,需要将如下扫描的三幅字符转换成点阵信息.后面给出了使用Python程序进行转换后的结果. #========================= ...

  7. mysql怎么把字符变成数字_mysql将字符转换成数字

    在操作mysql时,经常需要将字符转换成数字,这一步虽然简单,但不常用的话也很容易忘记,现将在网上找到的方法记录如下: 1.将字符的数字转成数字,比如'0'转成0可以直接用加法来实现 例如:将pony ...

  8. 将已有项目转为se项目_如何将 Java 项目转换成 Maven 项目

    本文内容 Java 项目 Maven 项目 Java 项目转换成 Maven 项目 本文主要介绍如何将 Java 项目转换成 Maven 项目.首先要明确的是,用 Maven 管理 Java 项目的确 ...

  9. js实现全角字符转换成半角字符

    在工作中用到将全角字符转换成半角的地方,就找了这个转换函数 //str:要转换的字符串 function DBC2SBC(str) {     var result="";     ...

  10. 用ikvm 来把java类库转换成_net类库,IKVM.NET

    软件介绍 IKVM.NET的是开源的基于.NET CLR 的Java虚拟机. 基于.NET的Java虚拟机意味着我们可以让Java程序跑在.NET上,可以通过虚拟机这个中介让Java程序和.NET应用 ...

最新文章

  1. servlet输出html
  2. Android开源框架——事件总线 EventBus3.0讲解
  3. ios开发中的C语言学习—— 结构体简介
  4. Java 13:文本块
  5. 机器学习各算法思想(极简版)
  6. flutter的按钮如何变为不可选中_Flutter 61: 图解基本 Button 按钮小结 (一)
  7. DDD专家张逸:复杂与架构演进的关系
  8. (07)System Verilog 类与结构体区别
  9. 【博客大赛】100行js代码实现网站在线用户数量统计 nodejs + socket.io方案
  10. Jupyter中显示数据data时只显示省略号不显示完整数据
  11. Android S中各类dex文件
  12. 在线制作流程图、思维导图(基于ProcessOn平台)
  13. 原型图都可以用什么软件做?分享这9款给你
  14. MySQL 数据库管理之 --- 日志查询
  15. android支付宝运动修改器,支付宝运动步数修改器下载-无需root刷支付宝运动步数工具下载_飞翔下载...
  16. 【无标题】输入和输出
  17. Linux网络编程必备的POSIX API的细节
  18. 最难php框架,PHP框架发展存四误区 死穴不除难成大器
  19. vmware虚拟机动态添加硬盘识别不了新增加的硬盘
  20. 关于unity物体移动穿墙问题。

热门文章

  1. mysql数据库增量_mysql数据库增量同步
  2. OpenLayers 3加载矢量地图源
  3. JAVA---数组从小到大排序方法
  4. MJKDZ PS2手柄(BK2461):驱动安装问题及解决
  5. 微信小程序 图片显示不完全
  6. Jmeter数据库连接(MYSQL)
  7. visual studio 资源编辑器 标尺和参考线,网格线
  8. H5小游戏框架总结推荐
  9. 电子阅读器行业市场研究分析及未来趋势预测分析
  10. nginx 集群部署