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

来源:互联网 发布:js单选框点击事件 编辑:程序博客网 时间:2024/05/01 21:25

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

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;}

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




原创粉丝点击