怎么判断一个16进制的数是否为合法的16进制码(且不为乱码) 例如 有AA 04AA,04都不是合法的16进制码,我应该怎么去判断,就大神指点。最好贴上代码。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 16进制数....例如:2d 32 77 61 79 2d 6f 66 66 20 65 6e 64 但例如:AA、04的话就不是,翻译出来就是乱码。 什么叫做反十六进制?你说的应该是十六进制转换为10进制吧。AA是合法的十六进制数,转换成十进制就是 16*10 + 10 = 17004也是合法的十六进制数,转换成十进制就是 16 * 0 + 4 = 4两个都是合法的十六进制数。你的提问本身就有问题,“怎么判断一个16进制的数是否为合法的16进制码”。如果一个数已经是16进制数了,它又怎么可能是不合法的16进制码呢?所以我估计你想问的应该是:如何判断一个十六进制字符串是否表示为一个可识别的ASCII码。 如何判断一个十六进制字符串是否表示为一个可识别的ASCII码。求大仙指示,最好附上源码 首先,计算机不知道哪些字符是你心目中的“可识别的字符”,只有你自己知道,因此你要有一个列表作为依据,可以定义一下字符类型的数组,对ASCII范围内的字符进制穷举:private static final char[] Readable_Charactor_Array = new char[]{ 'a', 'b', 'c', 'd', 'e', 'f', 'g', ......'A', 'B', 'C', 'D'......, '+', '-', '*', '/', '\\'......};当然,ASCII字符表中有一个范围是可见字符,你可以上网找一下这个表。然后就是字符串转换为整数,这个应该不难:public int[] fromHexString(String source){ if(source == null || source.length() == 0) return new int[0]; // 去掉空格 String text = source.trim().toLowerCase(); if(source.length() % 2 != 0) throw new RuntimeException("字符串长度必须是2的整数倍"); int pb = 0; int ps = 0; while(pb < result.length && ps < text.length()){ char ch = text.charAt(ps++); char cl = text.charAt(ps++); int a = 0; int b = 0; if('0' <= ch && ch <= '9'){ a = ch - '0'; }else{ a = ch - 'a' + 10; } if('0' <= cl && cl <= '9'){ b = cl - '0'; }else{ b = cl - 'a' + 10; } result[pb++] = (byte)((a << 4) + b); } return result;}判断一个整数表示的字符是否为可见字符,就是到字典中去找,找到则是,否则就不是:public boolean isReadableChar(int value){ for(char c : Readable_Charactor_Array){ if((int)c == value0 return true; } return false;}测试:public class Test{......public static void main(String[] args){ Test test = new Test(); String text = "AABBCCDD11223344556677"; int[] iArray = test.fromHexString(text); for(int i : iArray){ if(test.isReadableChar(i)) System.out.println("" + i + "是可见字符"); }}}=======================以上代码没有测试,有错误的话你自己调试一下 result这个是什么,貌似没定义? throw new RuntimeException("字符串长度必须是2的整数倍");int[] result = new int[text.length() / 2]; print和printf的问题、 I|O问题 数据库更新问题 正则表达式的问题 如何对一个字符串截位,要求一个区分中英文情况。也就是一个中文字算两位,而一个英文字母算一位? 安装了1.4.02_03的j2sdk,请问如何查看每个类包的详细信息 我在段代码里看见很多Debug.println("……")的语句,但不知道Debug是什么东西? java设置问题 java中的内部类在调用.getClass()时为什么是class java.lang.Class 求大神解答这个构造方法,有点不明白。 动态代理问题,在线的等解答 java SE 小程序
例如:2d 32 77 61 79 2d 6f 66 66 20 65 6e 64
但例如:AA、04的话就不是,翻译出来就是乱码。
什么叫做反十六进制?
你说的应该是十六进制转换为10进制吧。AA是合法的十六进制数,转换成十进制就是 16*10 + 10 = 170
04也是合法的十六进制数,转换成十进制就是 16 * 0 + 4 = 4两个都是合法的十六进制数。你的提问本身就有问题,“怎么判断一个16进制的数是否为合法的16进制码”。
如果一个数已经是16进制数了,它又怎么可能是不合法的16进制码呢?
所以我估计你想问的应该是:如何判断一个十六进制字符串是否表示为一个可识别的ASCII码。
首先,计算机不知道哪些字符是你心目中的“可识别的字符”,只有你自己知道,因此你要有一个列表作为依据,可以定义一下字符类型的数组,对ASCII范围内的字符进制穷举:
private static final char[] Readable_Charactor_Array = new char[]{
'a', 'b', 'c', 'd', 'e', 'f', 'g', ......'A', 'B', 'C', 'D'......, '+', '-', '*', '/', '\\'......
};
当然,ASCII字符表中有一个范围是可见字符,你可以上网找一下这个表。然后就是字符串转换为整数,这个应该不难:
public int[] fromHexString(String source){
if(source == null || source.length() == 0)
return new int[0];
// 去掉空格
String text = source.trim().toLowerCase();
if(source.length() % 2 != 0)
throw new RuntimeException("字符串长度必须是2的整数倍");
int pb = 0;
int ps = 0;
while(pb < result.length && ps < text.length()){
char ch = text.charAt(ps++);
char cl = text.charAt(ps++); int a = 0;
int b = 0;
if('0' <= ch && ch <= '9'){
a = ch - '0';
}else{
a = ch - 'a' + 10;
}
if('0' <= cl && cl <= '9'){
b = cl - '0';
}else{
b = cl - 'a' + 10;
}
result[pb++] = (byte)((a << 4) + b);
}
return result;
}判断一个整数表示的字符是否为可见字符,就是到字典中去找,找到则是,否则就不是:
public boolean isReadableChar(int value){
for(char c : Readable_Charactor_Array){
if((int)c == value0
return true;
}
return false;
}测试:
public class Test{......public static void main(String[] args){
Test test = new Test();
String text = "AABBCCDD11223344556677";
int[] iArray = test.fromHexString(text);
for(int i : iArray){
if(test.isReadableChar(i))
System.out.println("" + i + "是可见字符");
}
}}
=======================
以上代码没有测试,有错误的话你自己调试一下
result这个是什么,貌似没定义?
throw new RuntimeException("字符串长度必须是2的整数倍");
int[] result = new int[text.length() / 2];