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. CASE WHEN 及 SELECT CASE WHEN的用法(写了一坨烂代码发现两条sql就行了, 哎)

    转自:http://blog.sina.com.cn/s/blog_4c538f6c01012mzt.html Case具有两种格式.简单Case函数和Case搜索函数. 简单Case函数 CASE  ...

  2. 1A2B猜数字

    知乎链接 维基百科 问题描述 又名猜数字. 一方准备从0到9十个数字里抽出4个数,随机排列,另一方同样以这样的方法回应四个数.位置相同数字相同为A,数字出现,位置不同为B,然后计数. 例1234 56 ...

  3. 【RS】Improving Implicit Recommender Systems with View Data - 使用浏览数据提升隐式推荐系统

    [论文标题]Improving Implicit Recommender Systems with View Data(IJCAI 18) [论文作者]Jingtao Ding  , Guanghui ...

  4. 用UltraEdit判断打开文件的编码类型 用UltraEdit或notepad记事本查看文件编码格式 用UltraEdit查看当前文件编码

    用UltraEdit查看当前文件编码 想判断文件的编码类型? 用强大的UltraEdit-32软件: UltraEdit-32的状态栏可以显示文件的编码类型,详细情况如下: ANSI/ANSCI--- ...

  5. 树莓派进阶之路 (021) - 3.2inch RPi LCD (B)

    参考文档:http://www.waveshare.net/wiki/3.2inch_RPi_LCD_(B) 产品特点 320x240分辨率 电阻式触摸控制 兼容并可直接插入任何版本树莓派 提供Ras ...

  6. 【Oracle】详解Oracle中NLS_LANG变量的使用

    目录结构: contents structure [+] 关于NLS_LANG参数 NSL_LANG常用的值 在MS-DOS模式和Batch模式中设置NLS_LANG 注册表中NLS_LANG和系统环 ...

  7. TCP/IP 详解7 Ping指令

    首先介绍一下ping 指令的基本过程:(这部分摘自网络) 我们以下面一个网络为例:有A.B.C.D四台机子,一台路由RA,子网掩码均为255.255.255.0,默认路由为192.168.0.1 1. ...

  8. Spring Cloud问题分析

    基于Spring Cloud框架开发时,经常会碰到各种开发问题,那么碰到这些问题时如何去解决呢?下面描述基于Spring Cloud问题定位的基本思路,大概可以分为如下几步: 排查配置问题 环境问题 ...

  9. css浮动中避免包含元素高度为0的4种解决方法

    问题:当子元素中使用了float时,如果其父元素不指定高度,其高度将为0 解决:清除(闭合)浮动元素,使其父div高度自适应 方法一:额外标签+clear:both     (W3C推荐方法,兼容性较 ...

  10. 【转】DSL

    DSL DSL 时不时地会成为一个话题,所以今天想专门说一下. DSL 也就是 Domain Specific Language 的简称,是指为某些特定领域(domain)设计的专用语言.举个例子,L ...