·汉化新世纪 ·汉化新世纪论坛 ·百家争鸣 ·论坛集萃 ·汉化问答 ·软件介绍
文章首页 >> 汉化教学 >> 非标汉化 >> 汉化ASCII字符串的高级技巧I    Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎

汉化ASCII字符串的高级技巧I

作者: 梁瑞本 来源:汉化教学 时间:2003-08-05 点击:18366

汉化ASCII字符串的高级技巧

---C语言字符串(1)

作者:梁瑞本

 

一、前言

??在一般情况下,英文翻译成中文后的字节数会比原来英文的字节数少,也就没有不够位置(注:这里指的位置是指在程序可以正常运行下,可以修改的字节数,以下同!)来回写的问题,但是当英文为“YES”而需要译成“确定”时,“NO”译成“取消”时,那么就会因“确定”比“YES”多一个字节、“取消”比“NO”多两个字节而不够位置来回写,只能译成“是”或译成“算”(意思是“算了”也就是取消的意思 ^_^),这样看起来总让人别扭,那么有没有方法来增加位置,以下就是对C语言字符进行增加字符串长度的详述,C语言字符串的特点是一般可以增加10个字节以上,只要位置足够,就可以任意增加字符串长度,而操作难度不会增加。但是当没有位置时,虽然现在有相应的解决方法,但是操作难度就大大增加了,这将在下一篇里介绍。

二、增加字符串的例子

??让我们用Uedit32打开一个用VC来编写的程序Recover 4 all(图1),

我们可以看到在该程序中已有一个ASCII字符串翻译了,在翻译后由于译文比原英文的字节少,把多出来的字节用00来填空(指ASCII值为00),大家如果看了上一章就会明白,这是一个C语言字符串(目前只分为C语言符串和Pascal语言字符串两种,所以不是Pascal语言字符串就可以断定为C语言字符串),让我们来试一下增加字符串的长度,在“File(s) were recovered to:”前加上“这个是证明了可以增加字符”共24个字节(图2),

保存文件后让我们试运行这个程序,当在程序中保存文件时就会调用一个对话框来显示这个字符串(图3),

虽然程序并没有出错,但并不如想像中显示出我们所增加的字符串。我们现在知道了直接增加长度是不行的,那么是什么原因不能显示增加的字符串呢?在上一章中,我们讲述了在程序调用一个提示信息时就会先把字符串的偏移地址移到寄存器中,再调用显示函数,刚才由于增加了字符串,所以要显示的字符串的首字偏移改变了,而在程序中的相对应调用字符串的偏移地址还没有改变,所以调用显示函数时还是原来的的偏移代码,显示的还是原来的字符串,那么是否修改字符串的偏移代码为增加后的偏移代码就可以显示增加的字符串了呢?那么我们试试修改字符串的偏移代码,看一看是否可行!
??这次需要用我编写的一个代码转换器(图4),

是用来在十进制、十六进制以及调用偏移代码(调用字符串的偏移地址代码,下同)之转换之用。在十进制输入框中输入的是ASCII字符串首字符在文件中的十进制偏移地址,十六进制输入框是则是输入对应的十六进制的偏移地址。当你输入后,在调用代码框就会计算出要查找的调用代码(具体的使用在增补篇中详细讲述)。好了,现在我们试用一下,把在Uedit32中,把光标移到首字符处(图5),

那么在UEDIT32下面的状态栏中就会显示出这个字符在文件中的十六进制和十进制偏移地址。(图6)

在代码转换器中的十进制输入框中输入该字符串首字符在文件中的十进偏移“323592”(图4)或者在十六进制输入框中输入十六进制偏移“4F008”,在调用偏移代码输入框就会有计算出来的调用偏移代码“08F04400”(图4)。在UEDIT32中按下CTRL+F键调出查找对话框(图7),

在“查找什么”输入框中输入在代码转换器的调用偏移代码输入框中所显示的调用偏移代码“08F04400”,以十六进制方式查找(就是不要选取“查找ASCII字符”检查框),查找方向设置为“向上”,按“下一个”开始查找。在离文件头“74309”处找到这个字符串(图8),

记下这个偏移,回到刚才的字符串中,记下增加后字符后的实际偏移“323568”(十进制值)(图9),

用代码转换器求出调用代码为“F0EF4400”(图10),

把这个代码替换原来的调用偏移代码(图11),

保存文件,试运行软件,但是只是和刚才一样(图3),

还是没有显示出增加的字符。也就是说刚才修改的不是这个对话框的调用偏移代码,那么再次打开文件(不用恢复备份文件,因为这个字符串偏移代码可能是另一个对话框使用的),重新向上继续查找,在偏移68898又找到这个字符串了(图12),

像刚才那样修改调用偏移代码(图13)。

重新运行程序,在保存文件时终于出现了新增的字符串(图14),比较一下未增加字符前的(图3)。

 

三、可以增加字符长度的前提??

??由刚才的例子可以看出,只要可以把调用字符串的偏移代码修改为增加字符后正确调用代码就可以了,但是前提是有足够的ASCII码值为00的字符用来替换,由于VC程序把字符串集中放到代码段中,所以可以使用在翻译其它字符串时留下的00位置来增加字节。当完全没有多余的位置时,那么就需要更高级的修改方法来增加字符串长度,这将在下一篇里专门写这一高级修改方法操作。

下载本篇所讲到的软件:
    未修改前的
Recover 4 all
    修改后的
Recover 4 all

下一章:汉化ASCII字符串的高级技巧---C语言字符串(2)

汉化新世纪 责任编辑: 乾 .:|:. 标签(Tag): ASCII 非标

·上一篇: VB 可执行文件字体字号的修改 ·下一篇: 汉化ASCII字符串的高级技巧II

· 版权申明: 本文引自《汉化教学》,如有版权疑问请及时联系本站,以便本站处理。

· 转载申明: 本文引自《汉化教学》[ 作者: 梁瑞本],如需转载请直接联系原始作者,并请注明原始出处。

相关文章                                                                                发表评论 打印此文 关闭窗口

| 设为首页 | 加入收藏 | 联系我们 | 友情链接
Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎
本站内容,除转载或版权特别申明的内容外,皆遵守 创造共用协议中文版之“署名-非商业性使用-禁止演绎 2.5 中国大陆”条款
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.5 China License.
本网站内容源自汉化新世纪论坛的摘录和汉化新世纪成员的原创文章。
凡汉化新世纪论坛的文字皆默认为汉化新世纪与原作者共同拥有并授权发布。
如对本站发布文章有所异议请来信告知,我们将及时删除。
凡商业摘录本站文字请先与我们联系,本站将保留非授权商业发布的追究权利。
凡非商业摘录本站文字请明显注明出处和原作者,并不得改动,凡改动必先征求原作者同意。
苏ICP备05002283号