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
* @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));
}
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进制与字符串之间的相互转换
笔者前几日在开服过程中需要将字符串转化成为16进制的字符串,在网上找到了一些方法尝试之后,均发现存在一个问题-->字符串转为16进制后再转回来,英文正常,中文出现乱码 经过考虑决定通过以下方式进 ...
- C# 16进制与字符串、字节数组之间的转换(转)
1.请问c#中如何将十进制数的字符串转化成十六进制数的字符串 //十进制转二进制 Console.WriteLine("十进制166的二进制表示: "+Convert.ToSt ...
- carryLess小笔记001_Java中16进制与字符串之间的相互转换
笔者前几日在开服过程中需要将字符串转化成为16进制的字符串,在网上找到了一些方法尝试之后,均发现存在一个问题-->字符串转为16进制后再转回来,英文正常,中文出现乱码 经过考虑决定通过以下方式进 ...
- C# 16进制与字符串、字节数组之间的转换 (转载)
1.请问c#中如何将十进制数的字符串转化成十六进制数的字符串 //十进制转二进制 Console.WriteLine(, )); //十进制转八进制 Console.WriteLine(, )); / ...
- C#串口通讯,16进制与字符串、字节数组之间的转换。
1.将十进制数的字符串转化成十六进制数的字符串 //十进制转二进制Console.WriteLine("十进制166的二进制表示: "+Convert.ToString(166, ...
- C# 16进制与字符串、字节数组之间的转换
1.请问c#中如何将十进制数的字符串转化成十六进制数的字符串//十进制转二进制 Console.WriteLine("十进制166的二进制表示: "+Convert.ToStrin ...
- Python输出16进制不带0x补零,整数转16进制,字符串转16进制
Python输出16进制不带0x补零,整数转16进制,字符串转16进制 在开发中,我们偶尔会遇到需要将数据通过控制台打印出来,以检查数据传输的准确性.例如调试服务端刚接到的二进制数据(里面包含很多 ...
- ByteArray、16进制、字符串之间的转换
ByteArray.16进制.字符串之间的转换: package fengzi.convert { import flash.utils.ByteArray; public class ByteArr ...
- C# 16进制转字符串,字符串转16进制
{ //========================================================== //16进制转字符串 public static byte[] HexTo ...
随机推荐
- 低版本系统兼容的ActionBar(三)自定义Item视图+进度条的实现+下拉导航+透明ActionBar
一.自定义MenuItem的视图 custom_view.xml (就是一个单选按钮) <?xml version="1.0" encoding="u ...
- 简单绕过Chrome密码查看逻辑,查看浏览器已保存的密码
简单绕过Chrome密码查看逻辑,查看浏览器已保存的密码 利用场景: 同事或朋友外出有事,电脑未锁屏离开座位.可以利用这一间隙,查看Ta在Chrome浏览器上保存的账号密码 查看逻辑: 当我们要查 ...
- python的单例模式:
python的单例模式:http://funhacks.net/2017/01/17/singleton/ https://www.cnblogs.com/huchong/p/8244279.html ...
- Web 前沿——HTML5 Form Data 对象的使用
原文地址:http://www.cnblogs.com/lhb25/p/html5-formdata-tutorials.html XMLHttpRequest Level 2 添加了一个新的接口-- ...
- CSS 强制换行和禁止换行强制换行 和禁止换行样式
强制换行 1.word-break: break-all; 只对英文起作用,以字母作为换行依据. 2.word-wrap: break-word; 只对英文起作用,以单词作为换行依据. ...
- RV32M指令集
Risc-V定义了可选的RV32M,它定义了整数乘法除法指令. 总共8条指令. Category Fmt RV32I base machine code(bin) comment mul 整数乘法 R ...
- 菜鸟学步之 爆破AspriseOCR 4.0
最近写一个小程序要用到OCR控件,在网上查了一下,据说AspriseOCR 4.0效果不错.试用了一下发现的确还行,不过就是要注册,试用版本每次都会弹出讨厌的对话框来.网上看到有一篇“新人报道–处女破 ...
- 构建配置 defaultConfig signingConfigs buildTypes productFlavors dependencies
测试项目位置:https://github.com/baiqiantao/FragmentTest.git 项目结构: project 目录的 build.gradle 文件 // Top-level ...
- Python 通过打码平台实现验证码
在爬虫时,经常遇到登录需要验证码的情况,简单的验证码可以自己解决,复制的验证码需要借助机器学习,有一定的难度.还有一个简单的方案就是采用付费的打码平台. 比如R若快(http://www.ruokua ...
- Tensorflow-3-使用RNN生成中文小说
https://blog.csdn.net/heisejiuhuche/article/details/73010638 这篇文章不涉及RNN的基本原理,只是从选择数据集开始,到最后生成文本,展示一个 ...