二进制打印函数

void Hex_print(const char *buf, int len)

{

    static const char hex_char[] = "0123456789ABCDEF";

    const unsigned char *ptr = (const unsigned char*) buf;

    int i, nbytes, j, nlines;

    char msgbuf[512], *dst;

    std::string strTxt = "Recv Data";

 

    nlines = ((len + 0x0f) >> 4);

 

    if(NULL == msgbuf)

    {

        return;

    }

 

    sprintf(msgbuf, "--> addr=%08lx %ld bytes/n", buf, len);

 

    for (j = 0; j < nlines; j++) 

    {

        nbytes = (len < 16 ? len : 16);

        dst = msgbuf;

        memset(dst, 0x20, 4);

        dst += 4;

 

        for (i = 0; i < nbytes; i++) 

        {

            unsigned char ival = *ptr++;

            *dst++ = hex_char[(ival>>4)&0x0F];

            *dst++ = hex_char[ival&0x0F];

            *dst++ = ' ';

        }

 

        memset(dst, 0x20, 3 * (17 - nbytes));

        dst += 3 * (17 - nbytes);

 

        ptr -= nbytes;

 

        for (i = 0; i < nbytes; i++) 

        {

            if (*ptr >= 0x20 && *ptr <= 0x7e && *ptr != '%')

                *dst = *ptr;

            else

                *dst = '.';

            ptr++;

            dst++;

        }

        *dst++ = '/n';

        *dst = 0;

 

        strTxt += msgbuf;

 

        len -= nbytes;

    }

 

   m_ptrLogger->WriteDebug(__FILE__, __LINE__,    //写入log

        "%s", strTxt.c_str());

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值