package stringtohex;
/**
* java中使用16位(2个字节)的Unicode字符集编码作为字符编码格式。
* char类型的值也可直接作为整数类型的值来使用,但它是一个16位的无符号整数,即全部是正数,范围是0-65535
* 如果把0-65535内的一个int整数赋给char类型变量,系统会把这个int整数当成char类型变量
* @author AbuGe
*
*/
public class StringToHexDemo
{
private static String hexString = "0123456789ABCDEF";
public static void main(String[] args)
{
String s = "ab";
//将字符串转换成字节数组
byte[] b = s.getBytes();
StringBuilder sb = new StringBuilder(b.length * 2);
//将字节数组中的每个字节拆分成两个16进制数
for(int i = 0; i < b.length; i++)
{
sb.append(hexString.charAt((b[i] & 0xf0) >> 4));
sb.append(hexString.charAt((b[i] & 0x0f) >> 0));
}
String hexStr = sb.toString();
//注意一个char字符型占两个字节
byte[] c = convert2HexArray(s);
for(int i = 0; i < c.length; i++)
System.out.println(c[i]);
}
//字符串转化为十六进制表示,字符串只能是01234567890abcdef,否则会抛出java.lang.NumberFormatException
private static byte[] convert2HexArray(String apdu)
{
int len = apdu.length() / 2;
char[] chars = apdu.toCharArray();
String[] hexes = new String[len];
byte[] bytes = new byte[len];
for (int i = 0, j = 0; j < len; i = i + 2, j++)
{
hexes[j] =""+chars[i]+chars[i+1];//两个字符组成一个字节
bytes[j] = (byte)Integer.parseInt(hexes[j],16);
}
return bytes;
}
//十六进制转化为字符串
public static String byte2hex(byte[] b)
{ //一个字节的数, 转成16进制字符串
String hs = "";
String tmp = "";
for (int n = 0; n < b.length; n++)
{
//整数转成十六进制表示
tmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
if (tmp.length() == 1)
{
hs = hs + "0" + tmp;
} else {
hs = hs + tmp;
}
}
tmp = null;
return hs.toUpperCase(); //转成大写
}
}
字符串转十六进制与十六进制转字符串示例
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.