注册 登录
编程论坛 汇编论坛

字符窜的小问题

zjjzff1 发布于 2009-10-26 20:30, 834 次点击
用invoke    GetWindowText,hWnd,addr @buf,sizeof @buf得到的buf


如何遍历@buf字符窜的每一个字母
9 回复
#2
onepc2009-10-27 08:14
程序代码:
szBuff db 100 dup (?)
szFmat db '%d',0

----------------------------
invoke lstrlen,addr @buf

mov ecx,eax
lea esi,@buf
NextWord:
invoke wsprintf,addr szBuff,addr szFmat,[esi]
invoke MessageBox,NULL,esi,esi,0
inc esi
loop NextWord



未测试~


[ 本帖最后由 onepc 于 2009-10-27 11:13 编辑 ]
#3
onepc2009-10-27 11:14
呃,显示字符,应是要s 上面的改为%s
#4
东海一鱼2009-10-27 12:27
格式化字符%c
格式化字符串%s
整数%d

wsprintf不支持格式化浮点数
#5
zjjzff12009-10-27 13:09
不行啊
invoke wsprintf,addr szBuff,addr szFmat,[esi]
这句报错,[esi]不能直接放在这里
#6
sll08072009-10-27 19:33
.Data
szTxt        db    'abcdefghigklmnopqrst1234567890',0
szFmt        db    '%c',0
szCap        db    '单字符格式化',0
 
.Data?
szBuff    db 100 dup (?)
 
.Code
 
Start:
 
    lea    esi,szTxt
     
    .While BYTE ptr [esi]
         
        invoke    wsprintf,addr szBuff,addr szFmt,DWORD ptr [esi]
        invoke    MessageBox,NULL,addr szBuff,addr szCap,0
         
        inc esi
    .EndW
 
End Start
#7
zjjzff12009-10-28 18:58
对的,但只能输出英文,如何输出中文
#8
sll08072009-10-29 15:35
笨方法 转Unicode %C格式化
#9
zjjzff12009-10-29 19:28
转Unicode?


如何转,我是新手
#10
sll08072009-10-30 10:35
程序代码:
.386  
.Model Flat,StdCall  
Option Casemap :None  
 
Include        Windows.inc  
Include        User32.inc  
Include        Kernel32.inc  
 
Include        /MASMPlus/Macros/Strings.Mac  
 
IncludeLib    User32.lib  
IncludeLib    Kernel32.lib  
 
.Data
szTxt        db    '你号abcdefghig测试klmnop啊qrst1234567里890',0  
szFmt        db    '%C',0  
szCap        db    'Unicode单字符格式化',0  
 
.Data?  
usText        db    128 dup (?)  
szBuff        db    128 dup (?)  
 
.Code  
 
Ascii2Unicode Proc _lpwszReturnBuf:DWORD,_lpszSourceBuf:DWORD  
      
    pushad
     
    invoke    lstrlen,_lpszSourceBuf  
    inc        eax  
    invoke    MultiByteToWideChar,CP_ACP,0,_lpszSourceBuf,-1,_lpwszReturnBuf,eax
     
    popad  
    ret  
      
Ascii2Unicode EndP  
 
Start    Proc  
 
    invoke    Ascii2Unicode,addr usText,addr szTxt
     
    lea    esi,usText
      
    .While WORD ptr [esi]  
         
        invoke    wsprintf,addr szBuff,addr szFmt,DWORD ptr [esi]  
        invoke    MessageBox,NULL,addr szBuff,addr szCap,0  
         
        add        esi,2
    .EndW  
     
    ret  
     
Start EndP  
 
End Start
1