把内存中的值以16进制输出

传统的做法是,请看下面两个函数。

typedef unsigned char u_char;
void convert(u_char* src,int length)
{
    char* des = (char*)malloc(length*2+1);//多出的一个用来存放\0
    int i=0;
    for(;i<length;i++)
    {
        u_char pre = src[i]>>4;  //获得前4bite
        u_char af  = src[i]&0x0f;//获得后4bite
        //
        filt(pre,des[i*2]);
        filt(af,des[i*2+1]);
    }
    des[i*2] = 0;
}
void filt(int src,u_char des)
{
    switch(src)
    {
        case 0: des = '0'; break;
        case 1: des = '1'; break;
            //......
        case 10: des ='A'; break;
            //......
        case 15: des = 'F' ;break;
        default:des = 'X';
    }
}

有更快的做法就是:

void convert(u_char* src,int length)
{
    char str[] = "0123456789ABCDEF";
    char* des = (char*)malloc(length*2+1);//多出的一个用来存放\0
    int i=0;
    for(;i<length;i++)
    {
        des[i*2]   = str[src[i]>>4];//获得前4bite
        des[i*2+1] = str[src[i]&0x0f];//获得前后bite
    }
    des[i*2] = 0;
}

巧妙的利用数组来完成,有点像桶排序的思想。这种技巧很值得学习。




你可能感兴趣的:(转16机制)