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

关于GetDlgItemText从控件中取得的内容问题 (已解决)

wsz9903011 发布于 2009-08-01 23:45, 1913 次点击
比如 invoke  GetDlgItemText,hWnd,IDC_IID,addr szBuffer,512   比如我在控件IDC_IID输入6968676B6C70676D716A3138373937333638 一共18字节
1.那么在缓存区szBuffer里 这些算属于字符串 还是算16进制的数值??? (我想不是数值吧)
2.如果我想把它们转为16进制数值 是不是要自己转? WINDOWS API 里有没有现成转的??
3.假如自己转的思路是什么?是不是 mov eax, offset szBuffer 然后  [eax]..[eax+5]....[eax+7]分别把它们转为16进数值 然后再定义一个比如lpBuffer 缓冲区 mov ecx, offset lpBuffer  [ecx]...[ecx+5] 分别对应存储??

4.附加问题 iid=6968676B6C70676D716A3138373937333638
末字节为38。基数=38+30=68
从iid中截出69 68 6B 6C 70 6D 71 6A
分别减去基数68
得到ss号10348592
假设iid 里的值已经是16进制型的了 存储到szBuffer 写这个算法 可不可以用第3个问题的 那个方法??
比如mov eax,offset szBuffer
    mov edx,[eax+17];取第18个数字 这里为38 (不知道这样对不对)
    add edx,30h;求基数
........等等


可能问题有点多 而且也不是什么高技术的问题而且属于那种半吊子基础不好的人的问题  但希望各位老师能抽点时间解在下心中的疑惑(一般也好) 本以为会很简单 但真的自己不参照东西写还是问题百出 有时候看看别人源代码 修修补补 心想哦 知道了  但是真的自己不看书 不参照 还真的蛮难写的 这就是业余跟专业的区别吧(发点牢骚 别见怪 )解决

[ 本帖最后由 wsz9903011 于 2009-8-19 15:02 编辑 ]
4 回复
#2
zklhp2009-08-02 00:01
GetDlgItemText  当然是字符是了

有 GetDlgItemInt

自己转每个判断 先判断是字母还是数字 数字减30h 字母的话减'a'  'A' 再一位一位的生成 这个c写的很多 而且c的库里也有~

最后一个不太明白 偶的算法很烂~
#3
wsz99030112009-08-07 14:29
终于 把程序编好了  对汇编又有了很大程度的提高 感谢zklhp
#4
东海一鱼2009-08-12 11:54
mov eax,offset szBuffer
mov edx,[eax+17];取第18个数字 这里为38 (不知道这样对不对)
add edx,30h;求基数

mov eax,offset szBuffer
mov dl,byte ptr[eax + 17];是取第18个数字,但取到的是一个字节值。

汇编不像其他高级语言有很多数据类型,所以做数据运算时,应该自己心中有数。

[ 本帖最后由 东海一鱼 于 2009-8-12 11:56 编辑 ]
#5
zklhp2009-08-12 17:43
以下是引用东海一鱼在2009-8-12 11:54的发言:mov eax,offset szBuffer mov edx,[eax+17];取第18个数字 这里为38 (不知道这样对不对) add edx,30h;求基数mov eax,offset szBuffermov dl,byte ptr[eax + 17];是取第18个数字,但取到的是一个字节值。 ...
高级语言也是字节 字 双字 这几个 只不过类型检查的好 不过有时换来换去挺麻烦~~~
1