能力值:
( LV2,RANK:10 )
|
-
-
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)]
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
所以需要注重类型转换啊。。。
|
能力值:
( LV3,RANK:20 )
|
-
-
4 楼
多谢,明白了.
看来还得多多学习.
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
for(i=0;i<n;i++)
{
printf("%02x ",buf[i]&0xff);
}
就OK 了!!
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
我记得%02x这个所谓的02是限定输出宽度吧
而不是限定输出精度
而且这个宽度还有个限制是在位数小于等于指定宽度的情况
多出指定位就失效了
|
|
|