private static String hexString = "0123456789ABCDEF";
public static void main(String[] args) {
System.out.println(encode("中文"));
System.out.println(decode(encode("中文")));
}
/*
* 将字符串编码成16进制数字,适用于所有字符(包括中文)
*/
public static String encode(String str) {
// 根据默认编码获取字节数组
byte[] bytes = str.getBytes();
StringBuilder sb = new StringBuilder(bytes.length * 2);
// 将字节数组中每个字节拆解成2位16进制整数
for (int i = 0; i
sb.append(hexString.charAt((bytes[i] & 0xf0) >> 4));
sb.append(hexString.charAt((bytes[i] & 0x0f) >> 0));
}
return sb.toString();
}
/*
* 将16进制数字解码成字符串,适用于所有字符(包括中文)
*/
public static String decode(String bytes) {
ByteArrayOutputStream baos = new ByteArrayOutputStream(bytes.length() / 2);
// 将每2位16进制整数组装成一个字节
for (int i = 0; i
baos.write((hexString.indexOf(bytes.charAt(i))
.indexOf(bytes.charAt(i + 1))));
return new String(baos.toByteArray());
}
亲测可行,支持中文!!!有用请记得采纳
使用这个方法可以传进去的16进制的数字组成的字符串转化为utf-8格式的字符串
public static String toStringHex1(String s) {
byte[] baKeyword = new byte[s.length() / 2];
for (int i = 0; i
try {
baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(
i * 2, i * 2 + 2), 16));
} catch (Exception e) {
e.printStackTrace();
}
}
try {
s = new String(baKeyword, "utf-8");// UTF-16le:Not
} catch (Exception e1) {
e1.printStackTrace();
}
return s;
}
我想你的问题只是将数字转换为字符对吧,那么我就不帮你做全文多行的源码了,我做了一行转换的,你可以再在外层嵌套一个循环,并使用二维数组来实现全文多行的ASCII码转换:
#include "Stdio.h"
#include "Conio.h"
int main(void)
{
int num[10],i=0;
while(getchar() != 'n')
{
getchar();
scanf("%x",&num[i]);
printf("%c",num[i]);
i++;
}
getch();
return 0;
}
原理是这样的:
你每次的四个字节的格式都是xyy的形式,我只要读入那个十六进制数就可以了,用scanf("%x",&num[i]);语句就可以读入十六进制数字,将一行的十六进制数在循环中全部取出存放在一维数组中。
在输出方面我投了个懒,直接读入就输出了,不过这个不是关键了,关键是以printf("%c",num[i]);语句输出,编译器就会自行把十六进制数转换为ascii码所对应的字符并输出。
现在你明白了么,就是以格式化的输入输出实现读入的是十六进制数,输出的是字符。(那两个getchar()是分别读入字符和x的哈~~)
#将16进制字符转成二进制字符
def str2byte(s):
base='0123456789ABCDEF'
i=0
s = s.upper()
s1=''
while i c1=s[i]
c2=s[i+1]
i+=2
b1=base.find(c1)
b2=base.find(c2)
if b1 == -1 or b2 == -1:
return None
s1+=chr((b1 return s1
s = 'C7 EB CE F0 BE C6 BA F3 BC DD B3 B5'.replace(' ','') #去掉空格
s1 = str2byte(s)
print s1.decode('gbk') #以gbk编码解码输出
#结果
>>>s1
'xc7xebxcexf0xbexc6xbaxf3xbcxddxb3xb5'
>>>print s1.decode('gbk')
请勿酒后驾车
以上是如何用JAVA将十六进制转换成字符串?感谢!的详细内容。更多信息请关注PHP中文网其他相关文章!