C++ 打印緩存區數據 十六進制格式


1、調試C++程序時,有時可能需要以16進制打印輸出緩存區數據,以定位跟蹤問題,現提供其實現的代碼:

void printHex(char* buff, int buff_len)
{
    char *str = (char*)malloc(buff_len * sizeof(char)*2 + 1);
    if (str != NULL) {
        int ret = 0;
        bzero(str, buff_len * sizeof(char)*2 + 1);
        //memset(str, '\0', buff_len * sizeof(char)*2 + 1);
        for (int i = 0; i < buff_len; i++) {
            ret += sprintf(str + ret, "%02x", buff[i]);
        }
        printf("buff_hex_str:%s\r\n", str);
        free(str);
    }
}

 

2、以上打印16進制的實現,雖可適配緩存區大小,將緩存區所有字符都打印輸出,但每次都需要動態申請大量內存,可能會導致大量內存碎片,或者無法申請到足夠內存而不能打印。由於打印日志的目的一般是定位問題,只需要打印部分即可。因而,解決方案是只打印緩存區前面16個字符。代碼示例如下:

void printHex(char* buff, int buff_len)
{
    char str[33];
    bzero(str, 33);
    int ret = 0;
    for (int i = 0; i < 16 && i < buff_len; i++) {
        ret += sprintf(str + ret, "%02x", buff[i]);
    }
    printf("buff_hex_str:%s\r\n", str);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM