以16进制打印出一块内存buff

如下代码(支持windows与Linux)会以【16进制】【每行16字节】打印出一块内存的内容:

void PrintBuffer(void* pBuff, unsigned int nLen)
{
    if (NULL == pBuff || 0 == nLen)
    {
        return;
    }

    const int nBytePerLine = 16;
    unsigned char* p = (unsigned char*)pBuff;
    char szHex[3*nBytePerLine+1] = {0};

    printf("-----------------begin-------------------\n");
    for (unsigned int i=0; i<nLen; ++i)
    {
        int idx = 3 * (i % nBytePerLine);
        if (0 == idx)
        {
            memset(szHex, 0, sizeof(szHex));
        }
#ifdef WIN32
        sprintf_s(&szHex[idx], 4, "%02x ", p[i]);// buff长度要多传入1个字节
#else
        snprintf(&szHex[idx], 4, "%02x ", p[i]); // buff长度要多传入1个字节
#endif

        // 以16个字节为一行,进行打印
        if (0 == ((i+1) % nBytePerLine))
        {
            printf("%s\n", szHex);
        }
    }

    // 打印最后一行未满16个字节的内容
    if (0 != (nLen % nBytePerLine))
    {
        printf("%s\n", szHex);
    }

    printf("------------------end-------------------\n");
}

打印出来的结果如下:

以16进制打印出一块内存buff

时间: 2024-08-03 01:11:33

以16进制打印出一块内存buff的相关文章

byte值变16进制打印的 方法解析

首先我们要知道比特的大小是多少,Java中的定义为byte ,不论是CC++还是Java,一个字节都是8个位 其表示就是 XXXX XXXX x表示0或者1 而每四个为可以表示为16进制,最小是0=0x0 最大是15=0xF 也就是说一个byte为,可以由两个16进制数字表示,所以可以定义十六进制的数组,下表表示十进制数值,本身是16进制的String 所以1表示为1,10表示为a,15表示为f 上代码: public static String byteTo16(byte bt){ Strin

字符串16进制打印

String name = "中文"; byte[] gbkbytes = name.getBytes("ISO-8859-1"); for (int i = 0; i < gbkbytes.length; i ++) { System.out.printf("0x%02X ", gbkbytes[i]); } System.out.println();

支持windows linux下将指定内存段转为16进制与ascii码的日志输出类

来源:http://blog.csdn.net/lezhiyong 1. 简介 将指定内存段转为16进制与asci码的输出到日志文件的类. 2. 功能介绍 1) 支持window与linus双系统. 2) 可指定输出目录. 3) 日志能输出的时间精确到毫秒,日志能输出线程号. 4) 提供字符串输出. 5) 提供指定内存转换为16进制输出. 6) 提供指定内存转换为16进制和ascii码同时输出. 7) 可调整16进制输出间距. 3. 原理和算法 1) 模块是基于C++语言编写: 2) 通过条件定

详解2进制,10进制,16进制,8进制,36进制

本篇介绍C/C++语言中的进制的概念,主要介绍2进制.10进制.16进制,这三种是编程时必须掌握的也是最经常使用的.另外,介绍8进制和36进制,当中 36进制在实际project项目中会遇到. (本文选自<C/C++学习指南>.邵发.附录"2进制,10进制,16进制") 讲2进制.10进制.16进制的视频教程,点击观看 权利声明:作者拥有本书的所有权利. 作者授权不论什么人都能够自由转载本站点公布的内容,但转载时必须遵守下面限制: ①转载时必须全文转载.不得有不论什么改动,

详细解释2进制,10进制,16进制,8进制,36进制

本篇介绍C/C++语言中的进制的概念,主要介绍2进制.10进制.16进制,这三种是编程时必须掌握的也是最常用的.另外,介绍8进制和36进制,其中 36进制在实际工程项目中会遇到. (本文选自<C/C++学习指南>,邵发,附录"2进制,10进制,16进制") 权利声明:作者拥有本书的全部权利.作者授权任何人都可以自由转载本网站发布的内容,但转载时必须遵守以下限制: ①转载时必须全文转载,不得有任何修改,必须包含"权利声明"和"官网地址"

10进制转化成2进制,16进制

//写一个程序,将十进制,可以转换为2进制,八进制,十六进制,四进制 #include <stdio.h> #include <stdlib.h> /************************************************************************/ /* 将数字换算成2进制打印出来 */ /************************************************************************/

Linux c字符串中不可打印字符转换成16进制

本文由 www.169it.com 搜集整理 如果一个C字符串中同时包含可打印和不可打印的字符,如果想将这个字符串写入文件,同时方便打开文件查看或者在控制台中打印出来不会出现乱码,那么可以将字符串中的不可打印字符转换成16进制,此处提供一个函数供使用: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 void printhex(unsigned char *src,int len) {     

数组中hashCode就是内存地址,以及汉字幻化为16进制或10进制

int[] arr4={1,2,3,4,5}; System.out.println("arr4: "+arr4); System.out.println("arr4.hashCode: "+arr4.hashCode()); //将hashCode值转化为16进制的两种方式 System.out.println(Integer.toString(366712642,16));//将整数转化为16进制的数为:15db9742 System.out.println(I

C语言打印16进制出现0xffffff现象的问题剖析!

今天在博问里面看到一个朋友的问题,大致是在网络程序中,打印出来的16进制数,莫名的出现ffffff.例如,某个byte真是值为0xc9,打印出来确是0xffffffc9.原博问连接如下:http://q.cnblogs.com/q/71073/ 其实类似的问题不是只在网络程序中才会出现的,看示例代码: 1 #include <stdio.h> 2 int main() 3 { 4 char c = 0xc9; 5 printf("A:c = %2x\n",(unsigned