怎么判断一个16进制的数是否为合法的16进制码(且不为乱码)

shusheng1997 2012-02-24 12:07:31
例如 有AA 04
AA,04都不是合法的16进制码,我应该怎么去判断,就大神指点。
最好贴上代码。
...全文
2432 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灰狼 2012-03-02
  • 打赏
  • 举报
回复
没想到答了个如此低的结帖率的楼主的问题
shusheng1997 2012-02-29
  • 打赏
  • 举报
回复
又要沉了,问题还没解决。悲剧啊
小灰狼 2012-02-29
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 shusheng1997 的回复:]

引用 12 楼 hemowolf 的回复:
引用 10 楼 shusheng1997 的回复:
如何判断一个十六进制字符串是否表示为一个可识别的ASCII码。求大仙指示,最好附上源码


首先,计算机不知道哪些字符是你心目中的“可识别的字符”,只有你自己知道,因此你要有一个列表作为依据,可以定义一下字符类型的数组,对ASCII范围内的字符进制穷举:
private static fi……
[/Quote]

throw new RuntimeException("字符串长度必须是2的整数倍");
int[] result = new int[text.length() / 2];
shusheng1997 2012-02-29
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 hemowolf 的回复:]
引用 10 楼 shusheng1997 的回复:
如何判断一个十六进制字符串是否表示为一个可识别的ASCII码。求大仙指示,最好附上源码


首先,计算机不知道哪些字符是你心目中的“可识别的字符”,只有你自己知道,因此你要有一个列表作为依据,可以定义一下字符类型的数组,对ASCII范围内的字符进制穷举:
private static final char[] Readable_Char……
[/Quote]

result这个是什么,貌似没定义?
小灰狼 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 shusheng1997 的回复:]
引用 4 楼 hemowolf 的回复:
为什么说AA就不是合法的十六进制数呢

楼主说的十六进制数是怎么样的?

AA反十六进制出来是�。
04反16进制出来就是空格,我想排除这些特殊的。
[/Quote]

什么叫做反十六进制?
你说的应该是十六进制转换为10进制吧。

AA是合法的十六进制数,转换成十进制就是 16*10 + 10 = 170
04也是合法的十六进制数,转换成十进制就是 16 * 0 + 4 = 4

两个都是合法的十六进制数。

你的提问本身就有问题,“怎么判断一个16进制的数是否为合法的16进制码”。
如果一个数已经是16进制数了,它又怎么可能是不合法的16进制码呢?


所以我估计你想问的应该是:如何判断一个十六进制字符串是否表示为一个可识别的ASCII码。
shusheng1997 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 hemowolf 的回复:]
引用 10 楼 shusheng1997 的回复:
如何判断一个十六进制字符串是否表示为一个可识别的ASCII码。求大仙指示,最好附上源码


首先,计算机不知道哪些字符是你心目中的“可识别的字符”,只有你自己知道,因此你要有一个列表作为依据,可以定义一下字符类型的数组,对ASCII范围内的字符进制穷举:
private static final char[] Readable_Char……
[/Quote]
先谢谢大虾!!
小灰狼 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 shusheng1997 的回复:]
如何判断一个十六进制字符串是否表示为一个可识别的ASCII码。求大仙指示,最好附上源码
[/Quote]

首先,计算机不知道哪些字符是你心目中的“可识别的字符”,只有你自己知道,因此你要有一个列表作为依据,可以定义一下字符类型的数组,对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 + "是可见字符");
}
}

}


=======================
以上代码没有测试,有错误的话你自己调试一下
shusheng1997 2012-02-28
  • 打赏
  • 举报
回复
如何判断一个十六进制字符串是否表示为一个可识别的ASCII码。求大仙指示,最好附上源码
shusheng1997 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hemowolf 的回复:]
引用 5 楼 shusheng1997 的回复:
引用 4 楼 hemowolf 的回复:
为什么说AA就不是合法的十六进制数呢

楼主说的十六进制数是怎么样的?

AA反十六进制出来是�。
04反16进制出来就是空格,我想排除这些特殊的。


什么叫做反十六进制?
你说的应该是十六进制转换为10进制吧。

AA是合法的十六进制数,转换成十进制就是 16*10 + 10 ……
[/Quote]
确实是这样,大侠指点指点
Flycutter 2012-02-24
  • 打赏
  • 举报
回复
神马叫16进制码?
shusheng1997 2012-02-24
  • 打赏
  • 举报
回复
顶..........
shusheng1997 2012-02-24
  • 打赏
  • 举报
回复
没人回答吗?
shusheng1997 2012-02-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hemowolf 的回复:]
为什么说AA就不是合法的十六进制数呢

楼主说的十六进制数是怎么样的?
[/Quote]
AA反十六进制出来是�。
04反16进制出来就是空格,我想排除这些特殊的。
小灰狼 2012-02-24
  • 打赏
  • 举报
回复
为什么说AA就不是合法的十六进制数呢

楼主说的十六进制数是怎么样的?
shusheng1997 2012-02-24
  • 打赏
  • 举报
回复
没人····
shusheng1997 2012-02-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 flycutter__zfz 的回复:]
神马叫16进制码?
[/Quote]
16进制数....
例如:2d 32 77 61 79 2d 6f 66 66 20 65 6e 64
但例如:AA、04的话就不是,翻译出来就是乱码。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧