eax的地址处值为12345678h
现在想把12345678h格式化成1234-5678的字符串
用wsprintf函数应该怎样写
sFormat TCHAR "%04X-%04X",0
我试了下面的写法都有问题
代码:
INVOKE wsprintf, ADDR b, ADDR sFormat, DWORD ptr[eax+2h],WORD ptr[eax]
这种的结果是b=1234-12345678
代码:
INVOKE wsprintf, ADDR b, ADDR sFormat, word ptr [eax+2h],word ptr [eax]
这种的结果是b=1234-56780000,并且程序崩溃
------解决方案--------------------------------------------------------
Masm32 的汇编程序在这方面有问题。只能自己将 word 转换为 dword 然后传递给 wsprintf(),比如:
- Assembly code
movzx edx, word ptr [eax] movzx ecx, word ptr [eax][2] invoke wsprintf, addr b, addr sFormat, ecx, edx
------解决方案--------------------------------------------------------
试试下面的,没有验证过,仅供参考:
- Assembly code
push ecxmov ecx, [eax]and ecx, 0ffhINVOKE wsprintf, ADDR b, ADDR sFormat, DWORD ptr [eax+2h],ecxpop ecx