我只知道大概 是16进制解码什么吧. 里面-39 -7 和>= 49 >= 16 都什么意思啊;谢谢 c#的
 private static byte[] HexDecode(string data)
        {
            if (data == null)
                return null;
            char[] arr = data.ToCharArray();
            byte[] ret = new byte[arr.Length / 2];
            for (int i = 0; i < arr.Length / 2; ++i)
            {
                byte hi = (byte)(arr[i * 2] - '0');
                if (hi >= 49)
                    hi -= 39;
                else if (hi >= 16)
                    hi -= 7;
                byte lo = (byte)(arr[i * 2 + 1] - '0');
                if (lo >= 49)
                    lo -= 39;
                else if (lo >= 16)
                    lo -= 7;
                ret[i] = (byte)(hi << 4 | lo);
            }
            return ret; 
        }

解决方案 »

  1.   

     if (hi >= 49) 
    的意思相当于 一个char ch;
    if(ch >='a');
    因为 'a'-'0'==49;
    else if (hi >= 16) 
    相当于
    else if(ch >'z')
    至于
    hi -= 39; 
    hi -= 7
    都好像转化为 :;= < 等符号
      

  2.   

    呵呵,看函数名就知道这是个字符串转16进制解码的程序.
    比如调用 HexDecode("FE4A09");
    那么返回3个byte,分别为0xFE (254), 0x4A(74), 0x09(9)private static byte[] HexDecode(string data) 
            { 
                if (data == null) 
                    return null; 
                char[] arr = data.ToCharArray(); 
                byte[] ret = new byte[arr.Length / 2]; //字符串有几位,那么返回值就是一半的个数
                for (int i = 0; i < arr.Length / 2; ++i) 
                { 
                    byte hi = (byte)(arr[i * 2] - '0');    //取出高位,比如FE取出 F -'0' (如果这位是数字0-9,则返回0-9
                    if (hi >= 49)                          //如果这位是 a-f ,则变成 10-15
                        hi -= 39;                  
                    else if (hi >= 16)                     //如果这位是 A-F ,则变成 10-15
                        hi -= 7;   
                    byte lo = (byte)(arr[i * 2 + 1] - '0');    //取出低位,比如FE则取出E ,下面同高位运算
                    if (lo >= 49) 
                        lo -= 39; 
                    else if (lo >= 16) 
                        lo -= 7; 
                    ret[i] = (byte)(hi < < 4 ¦ lo);    //将高位左移四位加上低位,就是这个16进制对应的byte了.
                } 
                return ret; 
            } 
      

  3.   

    谢谢,我已经搞清楚了原因,是将字符表示的16进制,转成真正的 数字类型关于
    hi -= 39; 
    hi -= 7 我可以推导出来......但总是比较别扭;有什么有什么其他的思路,说明是要-7,-39