java字符转换成16进制_java 16进制与字符串直接相互转换
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进制与字符串直接相互转换相关推荐
- java 时间转换成字符串_java 获得系统时间 转换成字符串
1.long字符串转换成yyyy-MM-dd HH:mm:ss 格式输出 /** * 将长时间格式字符串转换为字符串 yyyy-MM-dd HH:mm:ss * @return */ public s ...
- 考研数据结构之串(4.4)——练习题之将串str中所有值为ch1的字符转换成ch2的字符(C表示)
题目 将串str中所有值为ch1的字符转换成ch2的字符,如果str为空串,或者串中不含值为ch1的字符,则什么都不做. 分析 扫描整个串,发现值为ch1的字符用值为ch2的字符覆盖即可. 代码 核心 ...
- 【引用】在Eclipse中将java Project转换成Dynamic Web Project
编辑工程的.project文件: 添加 <nature>org.eclipse.wst.common.project.facet.core.nature</nature> &l ...
- mysql将字符转换成数字
在操作mysql时,经常需要将字符转换成数字,这一步虽然简单,但不常用的话也很容易忘记,现将在网上找到的方法记录如下: 1.将字符的数字转成数字,比如'0'转成0可以直接用加法来实现 例如:将pony ...
- 带毫秒的字符转换成时间(DateTime)格式的通用方法
C#自身有更好的方式,Net任意String格式转换为DateTime类型 ====================================================== 原文 ==== ...
- 将扫描字符转换成点阵信息
➤ 00转换字符 在2020年秋季学期人工神经网络课程中,需要将如下扫描的三幅字符转换成点阵信息.后面给出了使用Python程序进行转换后的结果. #========================= ...
- mysql怎么把字符变成数字_mysql将字符转换成数字
在操作mysql时,经常需要将字符转换成数字,这一步虽然简单,但不常用的话也很容易忘记,现将在网上找到的方法记录如下: 1.将字符的数字转成数字,比如'0'转成0可以直接用加法来实现 例如:将pony ...
- 将已有项目转为se项目_如何将 Java 项目转换成 Maven 项目
本文内容 Java 项目 Maven 项目 Java 项目转换成 Maven 项目 本文主要介绍如何将 Java 项目转换成 Maven 项目.首先要明确的是,用 Maven 管理 Java 项目的确 ...
- js实现全角字符转换成半角字符
在工作中用到将全角字符转换成半角的地方,就找了这个转换函数 //str:要转换的字符串 function DBC2SBC(str) { var result=""; ...
- 用ikvm 来把java类库转换成_net类库,IKVM.NET
软件介绍 IKVM.NET的是开源的基于.NET CLR 的Java虚拟机. 基于.NET的Java虚拟机意味着我们可以让Java程序跑在.NET上,可以通过虚拟机这个中介让Java程序和.NET应用 ...
最新文章
- servlet输出html
- Android开源框架——事件总线 EventBus3.0讲解
- ios开发中的C语言学习—— 结构体简介
- Java 13:文本块
- 机器学习各算法思想(极简版)
- flutter的按钮如何变为不可选中_Flutter 61: 图解基本 Button 按钮小结 (一)
- DDD专家张逸:复杂与架构演进的关系
- (07)System Verilog 类与结构体区别
- 【博客大赛】100行js代码实现网站在线用户数量统计 nodejs + socket.io方案
- Jupyter中显示数据data时只显示省略号不显示完整数据
- Android S中各类dex文件
- 在线制作流程图、思维导图(基于ProcessOn平台)
- 原型图都可以用什么软件做?分享这9款给你
- MySQL 数据库管理之 --- 日志查询
- android支付宝运动修改器,支付宝运动步数修改器下载-无需root刷支付宝运动步数工具下载_飞翔下载...
- 【无标题】输入和输出
- Linux网络编程必备的POSIX API的细节
- 最难php框架,PHP框架发展存四误区 死穴不除难成大器
- vmware虚拟机动态添加硬盘识别不了新增加的硬盘
- 关于unity物体移动穿墙问题。