例如 有AA 04
AA,04都不是合法的16进制码,我应该怎么去判断,就大神指点。
最好贴上代码。 

解决方案 »

  1.   

    16进制数....
    例如:2d 32 77 61 79 2d 6f 66 66 20 65 6e 64 
    但例如:AA、04的话就不是,翻译出来就是乱码。
      

  2.   


    什么叫做反十六进制?
    你说的应该是十六进制转换为10进制吧。AA是合法的十六进制数,转换成十进制就是 16*10 + 10 = 170
    04也是合法的十六进制数,转换成十进制就是 16 * 0 + 4 = 4两个都是合法的十六进制数。你的提问本身就有问题,“怎么判断一个16进制的数是否为合法的16进制码”。
    如果一个数已经是16进制数了,它又怎么可能是不合法的16进制码呢?
    所以我估计你想问的应该是:如何判断一个十六进制字符串是否表示为一个可识别的ASCII码。
      

  3.   

    如何判断一个十六进制字符串是否表示为一个可识别的ASCII码。求大仙指示,最好附上源码
      

  4.   


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

  5.   


    result这个是什么,貌似没定义?
      

  6.   


    throw new RuntimeException("字符串长度必须是2的整数倍");
    int[] result = new int[text.length() / 2];