invoke locate,2,2 ;设定输出文本的坐标
mov eax,1235
invoke wsprintf,offset lpszSize,CTXT("%d"),eax
;将EAX 按照Signed decimal integer格式化,然后放到
;lpszSize中
invoke StdOut, offset lpszSize
;暂停显示,回车键关闭
invoke StdIn,addr buffer1,sizeof buffer1
invoke ExitProcess,0
函数原型:
int wsprintf(
LPTSTR lpOut, // 输出缓冲区地址,最大为1024个字节
LPCTSTR lpFmt, // 格式化串地址
... // 变量列表
);
举例:
invoke wsprintf,addr szBuffer,addr szReceive,lParam,lParam
invoke MessageBox,hWnd,offset szBuffer,addr szCaptionMain,MB_OK
解析:
上面的两条语句将lParam的数值以及lParam的字符串以szReceive格式化串定义的格式转换,并将结果存放到szBuffer中,然后程序将szBuffer中的内容在一个消息框中显示出来。
说明:
1、变量列表的数目由格式化字符串规定,wsprintf处理格式化字符串,遇到普通的字符则直接拷贝到输出,遇到%字符则代表有一个变量,%后面不同的字母表示不同的输出格式。
2、wsprintf是Win32 API中惟一一个参数数量不定的函数,使用wsprintf函数的时候,参数的数量取决于格式化字符串中用%号指定的数量,变量列表的数目和格式化串中的%格式一定要一一对应。例子中szReceive中有两个%号定义,所以后面跟了两个参数。
3、该函数存在于user32.dll文件中。
三、格式化输出格式
实际使用中格式化输出以 % 打头,后跟以一个控制输出格式的字母。
1. 格式化规定符
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
符号 作用
────────────────────────────────────────
%d 格式化为十进制有符号整数输出到缓冲区
%u 格式化为十进制无符号整数输出到缓冲区
%f 格式化为浮点数输出到缓冲区
%s 格式化为字符串输出到缓冲区
%c 格式化为单个字符输出到缓冲区
%e 格式化为指数形式的浮点数输出到缓冲区
%x 格式化为无符号以十六进制表示的整数(a-f小写输出)输出到缓冲区
%X 格式化为无符号以十六进制表示的整数(a-f大写输出)输出到缓冲区
%0 格式化为无符号以八进制表示的整数输出到缓冲区
%g 格式化为自动选择合适的表示法输出到缓冲区
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
说明:
(1). 可以在"%"和字母之间插进数字表示最大场宽。
例如: %3d 表示输出3位整型数, 不够3位右对齐。
%9.2f 表示输出场宽为9的浮点数, 其中小数位为2, 整数位为6,小数点占一位, 不够9位右对齐。
%8s 表示输出8个字符的字符串, 不够8个字符右对齐。
如果字符串的长度、或整型数位数超过说明的场宽, 将按其实际长度输出。但对浮点数, 若整数部分位数超过了说明的整数位宽度, 将按
实际整数位输出;若小数部分位数超过了说明的小数位宽度, 则按说明的宽度以四舍五入输出。
另外, 若想在输出值前加一些0, 就应在场宽项前加个0。
例如: %04d 表示在输出一个小于4位的数值时, 将在前面补0使其总宽度为4位。
如果用浮点数表示字符或整型量的输出格式, 小数点后的数字代表最大宽度,小数点前的数字代表最小宽度。
例如: %6.9s 表示显示一个长度不小于6且不大于9的字符串。若大于9, 则第9个字符以后的内容将被删除。
(2). 可以在"%"和字母之间加小写字母l, 表示输出的是长型数。
例如: %ld 表示输出long整数
%lf 表示输出double浮点数
(3). 可以控制输出左对齐或右对齐, 即在"%"和字母之间加入一个"-" 号可说明输出为左对齐, 否则为右对齐。
例如: %-7d 表示输出7位整数左对齐
%-10s 表示输出10个字符左对齐
上面的格式化输出参照 C 语言中的 printf 函数,对于汇编语言中的 wsprintf 函数的格式化是否还有其他形式或上述格式列表中的某些项目不适用 wsprintf,我也不是很清楚。