| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3945 人关注过本帖, 1 人收藏
标题:请指点VFP如何通过域名获取IP?在网上下载的程序结果是0.0.0.0,请指点多谢 ...
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
讲到Unicode编码,你前面那个反汇编结果,看到有猫腻了吗?

授人以渔,不授人以鱼。
2012-10-10 01:49
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 80楼 有容就大
真正沉迷于编程的人都有这种疯狂举动的,不是那些只会喊口号、说什么热爱就能入行的学生小哥可以想象得到的未来,到这个份上,没几个人还能说“爱编程”、“有兴趣就能行”。

授人以渔,不授人以鱼。
2012-10-10 01:53
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用TonyDeng在2012-10-10 01:49:39的发言:

讲到Unicode编码,你前面那个反汇编结果,看到有猫腻了吗?
https://bbs.bccn.net/attachment.php?aid=65379&k=e2368dfae964b9f2138a083be677eab7&t=1349804926&noupdate=yes

是不是在数据那一列 都是8个16进制但是后面全部是0 只有前面低端在不停的变化?
应该是那个 什么toWIndChar


[ 本帖最后由 有容就大 于 2012-10-10 02:01 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-10-10 01:54
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用TonyDeng在2012-10-10 01:53:02的发言:

真正沉迷于编程的人都有这种疯狂举动的,不是那些只会喊口号、说什么热爱就能入行的学生小哥可以想象得到的未来,到这个份上,没几个人还能说“爱编程”、“有兴趣就能行”。

内牛满面 内牛满面啊。

梅尚程荀
马谭杨奚







                                                       
2012-10-10 01:56
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 81楼 TonyDeng
找到了 是那个JMP .. MultiByteToWideChar

梅尚程荀
马谭杨奚







                                                       
2012-10-10 02:04
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
[attach]65383[/attach]
你看这一行,是调用一个内核函数,把多字节编码字符串(ANSI)转换为wchar_t宽字节编码了,但你看我的源程序,没有这个调用!我那个程序是完全彻底的ANSI版本代码,你可以比较我以前发过的宽字符版本的代码,就可以发现,连字符串的格式(前面带L)和函数的名称都不一样的!

这就证明了书上告诉我们的一个道理是真的:当代的Windows系统内部全部使用Unicode16编码字符串,即使你程序中全部使用传统的ANSI字符串编码(现在大多数人所学的C/C++编程知识都是在使用ANSI编码,那些函数的版本也是ANSI编码版本),在编译器编译过程中和操作系统DLL内核,一定会自动把你这些编码强制转换为Unicode16编码,而你还傻乎乎地自以为节省了多少内存和时间,却想不到这中间居然有大量的多余动作在消耗你那精心设计的算法效率。比如,你在写MessageBox()函数调用的代码,但其实编译器会根据编译环境的设定偷偷把最终代码编译为MessageBoxA()或MessageBoxW()两者之一,前者对应ANSI版本,后者对应Unicode版本,但即使是编译为MessageBoxA(),到了Windows下运行,DLL运行库也会临时把这个函数切换给MessageBoxW()执行,然后把返回的结果再转换为ANSI字符串给你,让你以为完全没有转换过程。现在,你明白你在汇编版问过的那个问题到底是怎么回事了么?

[ 本帖最后由 TonyDeng 于 2012-10-10 02:08 编辑 ]

授人以渔,不授人以鱼。
2012-10-10 02:05
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 86楼 TonyDeng
汇编那个问题好像是说如果明确写上MessageBoxW()会出现乱码 也就是说程序是默认调用
MessageBoxA()的 。。。

梅尚程荀
马谭杨奚







                                                       
2012-10-10 02:12
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
哈哈 越说越多啊 今天就到这里吧 我真的要去睡了 老大88

梅尚程荀
马谭杨奚







                                                       
2012-10-10 02:14
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
出现乱码是因为你传入的字符串不是宽字符串,缺了字符串转换那一环。把ANSI字符串传给MessageBoxW(),函数会把字符串解释为Unicode,而不是ANSI,那当然是乱码。在汇编中不注意这一点,就会犯错,但编译器不会,它替你做了你“忘记”做的事。换句话说,汇编的一切都要你自己来,错了没人可以救你。

授人以渔,不授人以鱼。
2012-10-10 02:16
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 89楼 TonyDeng
哦 这样啊 以后再向你讨教
被家人催了  

梅尚程荀
马谭杨奚







                                                       
2012-10-10 02:17
快速回复:请指点VFP如何通过域名获取IP?在网上下载的程序结果是0.0.0.0,请指点 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023806 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved