铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 2409|回复: 3

[通用] 50指令乱用系列-关于DOS的50指令sprintf的深入研究

[复制链接]
发表于 2009-7-27 17:22 | 显示全部楼层 |阅读模式
原帖由 KG 于 2007-1-7 22:14 发表
这里的format是C语言里的变量格式,即“%d”“%c”“%f”等(本人只用过%d)
使用时要先把“%d”这两个字符做成一个对话,记下对话编号N
然后用“读取对话到字符串”把N号对话赋给字符串 STR Y
然后用sprintf(9, type,s, Y, x, -1, -1)这个命令把变量x的值以Y的格式做为字符串赋给字符串s

这是论坛里关于这个指令用法的最早记录,但也大大误导了以后如无色之类的一大批MOD制作者

经我测试,其实sprintf可以这样用

第一轮测试
  1. ;Kdefnum=测试指令1
  2.   0                              ;  0(0)::空语句(清屏)
  3.   50 5 0 0 0 0 0 0               ;  50(32):全部变量清零
  4.   50 8 0 26 1000 0 0 0           ;  50(32):读对话到字符串  Str[X1000]=talk(26)
  5.   50 9 0 1100 1000 1200 0 0      ;  50(32):Sprintf  Str[X1100]=CStr(1200) FORMAT=Str[X1000]//这个是重点
  6.   50 33 0 1100 0 40 1797 0       ;  50(32):显示字符串 显示字符串1100 (0,40)Color1797
  7.   50 35 0 0 0 0 0 0              ;  50(32):读取键盘 [X0]=键值
  8.   -1                             ;  -1(FFFF):事件结束
复制代码
talk[26]:我是%d,= =今天天气不错~

测试结果:




第二轮测试
  1. ;Kdefnum=测试指令2
  2.   0                              ;  0(0)::空语句(清屏)
  3.   50 5 0 0 0 0 0 0               ;  50(32):全部变量清零
  4.   50 8 0 26 1000 0 0 0           ;  50(32):读对话到字符串  Str[X1000]=talk(26)
  5.   50 8 0 27 1200 0 0 0           ;  50(32):读对话到字符串  Str[X1200]=talk(27)
  6.   50 9 1 1100 1000 1200 0 0      ;  50(32):Sprintf  Str[X1100]=CStr([X1200]) FORMAT=Str[X1000]
  7.   50 33 0 1100 0 40 1797 0       ;  50(32):显示字符串 显示字符串1100 (0,40)Color1797
  8.   50 35 0 0 0 0 0 0              ;  50(32):读取键盘 [X0]=键值
  9.   -1                             ;  -1(FFFF):事件结束
复制代码
talk26=我是%c,= =今天天气不错~
talk27=A


测试结果:



第三轮测试
  1. ;Kdefnum=测试指令3
  2.   0                              ;  0(0)::空语句(清屏)
  3.   50 5 0 0 0 0 0 0               ;  50(32):全部变量清零
  4.   50 8 0 26 1000 0 0 0           ;  50(32):读对话到字符串  Str[X1000]=talk(26)
  5.   50 9 0 1100 1000 1200 0 0      ;  50(32):Sprintf  Str[X1100]=CStr(1200) FORMAT=Str[X1000]//这个是重点
  6.   50 33 0 1100 0 40 1797 0       ;  50(32):显示字符串 显示字符串1100 (0,40)Color1797
  7.   50 35 0 0 0 0 0 0              ;  50(32):读取键盘 [X0]=键值
  8.   -1                             ;  -1(FFFF):事件结束
复制代码
talk26=我是%9d,= =今天天气不错~

测试结果:




总结:
sprintf是一个很可怕的指令,他几乎和C里的format一样,不需要单独将%d放在一个对话里
故最开始的那个引用里的某个人误导了我们将近三年。。。。

[发帖际遇]: 黄顺坤买通太监进宫偷葵花,转手挣到银两29.


[ 本帖最后由 黄顺坤 于 2010-2-21 17:51 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-7-27 17:39 | 显示全部楼层
就是能把对话中的%d换成数字,%c换成其他变量中的文字……
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-7-29 14:25 | 显示全部楼层
想不到KG誤導了大家
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-7-29 15:16 | 显示全部楼层
原本就是c的sprintf,在pascal里面是format
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-5-19 06:40

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表