package mobi.dzs.android.util;

import java.util.Locale;

/**
* 16进制值与String/Byte之间的转换
* @author JerryLi
* @email lijian@dzs.mobi
* @data 2011-10-16
* */
public class CHexConver
{
private final static char[] mChars = "0123456789ABCDEF".toCharArray();
private final static String mHexStr = "0123456789ABCDEF";
/**
* 检查16进制字符串是否有效
* @param sHex String 16进制字符串
* @return boolean
*/
public static boolean checkHexStr(String sHex){
String sTmp = sHex.toString().trim().replace(" ", "").toUpperCase(Locale.US);
int iLen = sTmp.length(); if (iLen > 1 && iLen%2 == 0){
for(int i=0; i<iLen; i++)
if (!mHexStr.contains(sTmp.substring(i, i+1)))
return false;
return true;
}
else
return false;
} /**
* 字符串转换成十六进制字符串
* @param str String 待转换的ASCII字符串
* @return String 每个Byte之间空格分隔,如: [61 6C 6B]
*/
public static String str2HexStr(String str){
StringBuilder sb = new StringBuilder();
byte[] bs = str.getBytes(); for (int i = 0; i < bs.length; i++){
sb.append(mChars[(bs[i] & 0xFF) >> 4]);
sb.append(mChars[bs[i] & 0x0F]);
sb.append(' ');
}
return sb.toString().trim();
} /**
* 十六进制字符串转换成 ASCII字符串
* @param str String Byte字符串
* @return String 对应的字符串
*/
public static String hexStr2Str(String hexStr){
hexStr = hexStr.toString().trim().replace(" ", "").toUpperCase(Locale.US);
char[] hexs = hexStr.toCharArray();
byte[] bytes = new byte[hexStr.length() / 2];
int iTmp = 0x00;; for (int i = 0; i < bytes.length; i++){
iTmp = mHexStr.indexOf(hexs[2 * i]) << 4;
iTmp |= mHexStr.indexOf(hexs[2 * i + 1]);
bytes[i] = (byte) (iTmp & 0xFF);
}
return new String(bytes);
} /**
* bytes转换成十六进制字符串
* @param b byte[] byte数组
* @param iLen int 取前N位处理 N=iLen
* @return String 每个Byte值之间空格分隔
*/
public static String byte2HexStr(byte[] b, int iLen){
StringBuilder sb = new StringBuilder();
for (int n=0; n<iLen; n++){
sb.append(mChars[(b[n] & 0xFF) >> 4]);
sb.append(mChars[b[n] & 0x0F]);
sb.append(' ');
}
return sb.toString().trim().toUpperCase(Locale.US);
} /**
* bytes字符串转换为Byte值
* @param src String Byte字符串,每个Byte之间没有分隔符(字符范围:0-9 A-F)
* @return byte[]
*/
public static byte[] hexStr2Bytes(String src){
/*对输入值进行规范化整理*/
src = src.trim().replace(" ", "").toUpperCase(Locale.US);
//处理值初始化
int m=0,n=0;
int iLen=src.length()/2; //计算长度
byte[] ret = new byte[iLen]; //分配存储空间 for (int i = 0; i < iLen; i++){
m=i*2+1;
n=m+1;
ret[i] = (byte)(Integer.decode("0x"+ src.substring(i*2, m) + src.substring(m,n)) & 0xFF);
}
return ret;
} /**
* String的字符串转换成unicode的String
* @param strText String 全角字符串
* @return String 每个unicode之间无分隔符
* @throws Exception
*/
public static String strToUnicode(String strText)
throws Exception
{
char c;
StringBuilder str = new StringBuilder();
int intAsc;
String strHex;
for (int i = 0; i < strText.length(); i++){
c = strText.charAt(i);
intAsc = (int) c;
strHex = Integer.toHexString(intAsc);
if (intAsc > 128)
str.append("\\u");
else // 低位在前面补00
str.append("\\u00");
str.append(strHex);
}
return str.toString();
} /**
* unicode的String转换成String的字符串
* @param hex String 16进制值字符串 (一个unicode为2byte)
* @return String 全角字符串
* @see CHexConver.unicodeToString("\\u0068\\u0065\\u006c\\u006c\\u006f")
*/
public static String unicodeToString(String hex){
int t = hex.length() / 6;
int iTmp = 0;
StringBuilder str = new StringBuilder();
for (int i = 0; i < t; i++){
String s = hex.substring(i * 6, (i + 1) * 6);
// 将16进制的string转为int
iTmp = (Integer.valueOf(s.substring(2, 4), 16) << 8) | Integer.valueOf(s.substring(4), 16);
// 将int转换为字符
str.append(new String(Character.toChars(iTmp)));
}
return str.toString();
}
}

Java Hex 16进制的 byte String 转换类的更多相关文章

  1. java中 16进制字符串 与普通字符串 与 byte数组 之间的转化

    方法依赖commons-codec包  maven的引入方式如下 <dependency> <groupId>commons-codec</groupId> < ...

  2. java中16进制转换10进制

    java中16进制转换10进制 public static void main(String[] args) { String str = "04e1"; String myStr ...

  3. C#字符串和16进制字符串之间的转换

    将字符串编码成 16进制 字符串表示: using System;using System.Collections.Generic;using System.Linq;using System.Tex ...

  4. Java中byte与16进制字符串的互相转换

    * Convert byte[] to hex string.这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串. * @param s ...

  5. [转]Java中byte与16进制字符串的互相转换

    Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符, ...

  6. java利用16进制来辨别png格式的图片

    很多人知道利用.png的字符串结尾可以判断前端传入的图片是否为png格式,但是这只是潜意识的判断!那么如何利用png读写的特殊内容来深意识地判断图片格式呢?最近在做东西的时候遇到了点问题,在加载图片的 ...

  7. Java中16进制与字符串之间的相互转换

    笔者前几日在开服过程中需要将字符串转化成为16进制的字符串,在网上找到了一些方法尝试之后,均发现存在一个问题-->字符串转为16进制后再转回来,英文正常,中文出现乱码 经过考虑决定通过以下方式进 ...

  8. Java中将16进制字符串转换成汉字

    技术交流群:233513714 /** * 将16进制字符串转换成汉字 * @param str * @return */ public static String deUnicode(String ...

  9. 16进制到byte转换

    我们经常会看到这样的语法 (byte) 0xAD 0xAD实际是个16进制,转换成二进制为:10101101,转换成10进制是:173,它是个正数 10101101只是int的简写,int由4个byt ...

随机推荐

  1. <转>SQL 左外连接,右外连接,全连接,内连接

    本文节选自:https://www.cnblogs.com/youzhangjin/archive/2009/05/22/1486982.html       连接条件可在FROM或WHERE子句中指 ...

  2. windows修改环境变量

    windows的环境变量有两套: 系统的 当前用户的 不同的用户可以拥有不同的环境变量,当前用户的环境变量优先级比系统的环境变量优先级高,PATH环境变量比较特殊,它不是替换而是拼接. 在命令行下也可 ...

  3. 常用Raspberry Pi周边传感器的使用教程(转)

    转:http://bbs.xiaomi.cn/thread-7797152-1-1.html 在Raspberry Pi 的使用和开发过程中,你可能时常需要一些硬件和传感器等来支持你的开发工作,例如, ...

  4. MYSQL-innodb性能优化几个点

    MYSQL-innodb性能优化几个点 数据库常用参数 MYSQL数据库的参数配置一般在my.ini配置(部分参数也可以用set  global 参数名=值 做临时调整,重启后失效),配置完后需要重启 ...

  5. 1 时间戳 2 C# 如何生成一个时间戳 3 js 时间加一分钟... 4 js string->date 5 js 取得当天0点 / 23:59:59 时间

    var str = 'Jan 23, 2019 10:25:47 AM';var strnow = new Date(str); 时间戳(timestamp),一个能表示一份数据在某个特定时间之前已经 ...

  6. 为什么 c = tf.matmul(a, b) 不立即执行矩阵乘法?

    在 TensorFlow Python API 中,a.b 和 c 是  tf.Tensor  对象.Tensor 对象是指令结果的符号句柄,但它实际上并不存放指令的输出值.相反,TensorFlow ...

  7. dbms_monitor开启/关闭会话跟踪

    从10g开始,可以使用dbms_monitor开启/关闭会话跟踪. sql> desc dbms_monitor procedure client_id_stat_disable argumen ...

  8. 向量运算 与 JavaScript

    二维向量都包含两个值:方向(direction)及大小(magnitude)   这两个值可以表达出各种各样的物理特性来,比如力和运动.如两个物体间的碰撞检测.   向量的大小   虽说二维向量是对大 ...

  9. zTree变异篇:如何让同级树节点平铺而非垂直显示

    昨天有一个zTree的使用者在实际的项目中有着这样一个特殊的需求,要求同级树节点能够水平显示,根据设定的宽度自动换行,效果图如下所示:   通过在浏览器调试模式下观察其同级节点的css为: 这个dis ...

  10. Batch to setup JAVA programming environment for Algorithm class from priston

    Original web site: http://algs4.cs.princeton.edu/linux/ Part. I [username:~/] [username:~/] mkdir al ...