首页
社区
课程
招聘
[原创]关于十六进制输出的问题.
发表于: 2009-3-1 03:48 6347

[原创]关于十六进制输出的问题.

2009-3-1 03:48
6347

我写程序是要像ULTRAEDIT一样将文件输出成二位十六进制的格式,
可是当我这要输出时:       

for(i=0;i<n;i++)
  {
         printf("%02x ",buf[i]);                                                       
  }
------------------------------------------------------------------
会出现
0A FFFFFFB7  B6  FFFFFFD3........................
%2X不是定了只能输出二位吗?为什么多了FFFFFF?
网上查了下资料printf("%02x ",(unsigened char )buf[i]);   
这样就OK了.

原理是我将无符号数据转成了有符号数据,但有二点不明白
1,%2X不是定了只能输出二位吗?为什么多了FFFFFF?
2,为什么多的是FFFFFF六个F,不是二个?
请知道的前辈,具体讲下,我是新手.多谢...........呵呵


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (5)
雪    币: 231
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qdk
2
printf第二个参数通过了eax传递了
	int n=-4;
004113BE  mov         dword ptr [n],0FFFFFFFCh 
	printf("%02X\n",(unsigned char)n);
004113C5  movzx       eax,byte ptr [n]              ;强制转换了,bits[31~8]全都用0填充了
004113C9  mov         esi,esp 
004113CB  push        eax  
004113CC  push        offset string "%02X\n" (41573Ch) 
004113D1  call        dword ptr [__imp__printf (4182BCh)] 


	int n=-4;
004113BE  mov         dword ptr [n],0FFFFFFFCh 
	printf("%02X\n",n);
004113C5  mov         esi,esp 
004113C7  mov         eax,dword ptr [n] 
004113CA  push        eax  
004113CB  push        offset string "%02X\n" (41573Ch) 
004113D0  call        dword ptr [__imp__printf (4182BCh)] 
2009-3-1 06:37
0
雪    币: 263
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
所以需要注重类型转换啊。。。
2009-3-1 23:10
0
雪    币: 254
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
多谢,明白了.
看来还得多多学习.
2009-3-1 23:26
0
雪    币: 175
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
for(i=0;i<n;i++)
  {
   printf("%02x ",buf[i]&0xff);                                    
  }
就OK 了!!
2009-3-8 08:22
0
雪    币: 201
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我记得%02x这个所谓的02是限定输出宽度吧
而不是限定输出精度
而且这个宽度还有个限制是在位数小于等于指定宽度的情况
多出指定位就失效了
2009-3-8 13:28
0
游客
登录 | 注册 方可回帖
返回
//