字符数组用printf函数16进制输出格式?

奋斗_小伙 2015-01-26 04:55:45
WinHex截图:

内存映射文件的方式得到起始地址的指针:ptr_File = (char*)pbFile;
目的:按照 ”53 FF 00 F0 .......“的格式输出到屏幕上。
自己写的程序,有错误希望大家帮忙看看,改改?
for(int K=0;K<10;K++)
{
printf("ptr_File[K]=%X\n",ptr_File[K]);
Sleep(2000);
}

输出结果是:

输出结果和预期的(按照 ”53 FF 00 F0 .......“的格式输出到屏幕上)不一样?为什么?谢谢。。

问题2: 如果我想ptr_File[K]==00 时作为判定条件。if(这怎么写?

这些知识了解的很少。。谢谢大家帮忙.。。
...全文
12626 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
神说哈喽我的 2016-07-13
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
void HexDump(char *buf,int len,int addr) {
    int i,j,k;
    char binstr[80];

    for (i=0;i<len;i++) {
        if (0==(i%16)) {
            sprintf(binstr,"%08x -",i+addr);
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        } else if (15==(i%16)) {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
            sprintf(binstr,"%s  ",binstr);
            for (j=i-15;j<=i;j++) {
                sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
            }
            printf("%s\n",binstr);
        } else {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        }
    }
    if (0!=(i%16)) {
        k=16-(i%16);
        for (j=0;j<k;j++) {
            sprintf(binstr,"%s   ",binstr);
        }
        sprintf(binstr,"%s  ",binstr);
        k=16-k;
        for (j=i-k;j<i;j++) {
            sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
        }
        printf("%s\n",binstr);
    }
}
太感谢了!!!!!!这么实用标致的一段代码。
lm_whales 2015-01-26
  • 打赏
  • 举报
回复
引用 4 楼 my_xxh 的回复:
[quote=引用 3 楼 lm_whales 的回复:]
问题解决了。感谢泥的回答。我是新手,懂得太少。。想问问关于这方面(类似上述问题相关的c语言编程细节方面)有资料推荐。分享嘛?谢谢[/quote] 这种 细节问题 1)C,C++标准 2)各种编译器的文档 3)一些C,C++书籍,例如C程序设计语言 之类的--- 英文原版比较好,看不懂原版(我也看不懂),看翻译版,讲的比较透彻 C primer C++primer 一些教材,可能不会讲的太细致。 毕竟那些教材,只是介绍一些入门知识而已。
奋斗_小伙 2015-01-26
  • 打赏
  • 举报
回复
引用 3 楼 lm_whales 的回复:
%mx, 之类的格式输出,输出宽度不够,忽略输出宽度,直接全部输出 在输出前,转换为无符号类型,可以避免这种问题,,,, 所有较短整型,在调用 printf 之类的输出流函数的时候,会转换为int 类型, 而 char 类型缺省实现,并不是 unsigned char,通常是 signed char; 转化为int 的时候,会做符号位扩展
问题解决了。感谢泥的回答。我是新手,懂得太少。。想问问关于这方面(类似上述问题相关的c语言编程细节方面)有资料推荐。分享嘛?谢谢
lm_whales 2015-01-26
  • 打赏
  • 举报
回复
%mx, 之类的格式输出,输出宽度不够,忽略输出宽度,直接全部输出 在输出前,转换为无符号类型,可以避免这种问题,,,, 所有较短整型,在调用 printf 之类的输出流函数的时候,会转换为int 类型, 而 char 类型缺省实现,并不是 unsigned char,通常是 signed char; 转化为int 的时候,会做符号位扩展
赵4老师 2015-01-26
  • 打赏
  • 举报
回复
void HexDump(char *buf,int len,int addr) {
    int i,j,k;
    char binstr[80];

    for (i=0;i<len;i++) {
        if (0==(i%16)) {
            sprintf(binstr,"%08x -",i+addr);
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        } else if (15==(i%16)) {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
            sprintf(binstr,"%s  ",binstr);
            for (j=i-15;j<=i;j++) {
                sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
            }
            printf("%s\n",binstr);
        } else {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        }
    }
    if (0!=(i%16)) {
        k=16-(i%16);
        for (j=0;j<k;j++) {
            sprintf(binstr,"%s   ",binstr);
        }
        sprintf(binstr,"%s  ",binstr);
        k=16-k;
        for (j=i-k;j<i;j++) {
            sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
        }
        printf("%s\n",binstr);
    }
}
Saleayas 2015-01-26
  • 打赏
  • 举报
回复
printf("ptr_File[K]=%02X\n",ptr_File[K]);

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧