C++小知识之wsprintf使用

时间:2021-09-04 16:21:01

在C语言中格式化字符串可以使用printf,但是在WINDOWS编程设计中却行不通了,但是却有变通的方法,那就是用 wsprintf这个函数。它的格式如下:
int wsprintf (    LPTSTR lpOut,    // 指向需要输出的字符串的指针
                LPCTSTR lpFmt,    //指向格式控制字符串的指针
                ……                 // 其他可选参数
            );

wsprintf(缓冲区, 格式, 要格式化的值);

第一个参数是字符缓冲区,后面是格式字符串,wsprintf不是将格式化结果写到标准输出,而是将其写入缓冲区中,该函数返回该字符串的长度。比如我们想通过MessageBox来输出一个整形变量的值,可以用以下代码实现:

char szBuffer[100];
ing number=100;
wsprintf(szBuffer, "%d",number);
MessgaeBox(NULL,szBrffer,TEXT("格式化字符串"),0);

这个函数除了将内容格式化输出到第一个参数所提供的字符串缓冲区以外,其它功能与printf函数相同。

wsprintf对应的字符串是宽字符型wchar_t,即一个字符占用2个字节的内存空间。

sprintf对应的字符串是字符类型为char,即一个字符占用1个字节的内存空间。

sprintf是用于对ASCII码的127个字符进行操作,wsprintf是对UNICODE的多语言字符进行操作。如:

sprintf(buffer, "ascii");
wsprintf(buffer, L"unicode");
wsprintf(filepath, L"%s\\%s", folder_name, find_data.cFileName);

wsprintf函数能够将一组字符序列按lpFmt参数指定的格式转换,然后保存在lpOut参数指定的字符缓冲区中等待输出。其中,字符序列由可选参数决定,而可选参数的数目和具体内容应该与lpFmt所指定的格式一致。

如果wsprintf函数操作成功,则返回输出字符的数目,但这个字符数目不包括表示结束的NULL标志。如果操作失败,返回的整数值将与输出的字符数目不相符。

BOOL TextOut( HDC hdc,        // 设备描述表句柄
int nXStart,     // 文本输出起始点 X坐标
int nYStart,     // 文本输出起始点 Y坐标
LPCTSTR lpString,     // 指向输出字符串的指针
int cbString     // 字符串中字符的数目
);

TextOut函数能够用当前设定的字体在窗口的指定部位输出一段文本信息。如果操作成功则返回一非零值,否则返回零值。捕获键盘消息的信息主要根据表中的描述,通过使用按位操作确定某些特定位的值,然后再判断具体的状态。

wsprintf的用法的一个程序片断:

int x=6;
LPTSTR szBuffer=new TCHAR[1024];
wsprintf(szBuffer,"%d",x);         //将变量x的值格式化为数字(%d)输出到缓冲区szBuffer指向的内存单元。
MessageBox(NULL,szBuffer," ",MB_OK);

格式化规定符:

  • %d 格式化为十进制有符号整数输出到缓冲区
  • %u 格式化为十进制无符号整数输出到缓冲区
  • %f 格式化为浮点数输出到缓冲区
  • %s 格式化为字符串输出到缓冲区
  • %c 格式化为单个字符输出到缓冲区
  • %e 格式化为指数形式的浮点数输出到缓冲区
  • %x 格式化为无符号以十六进制表示的整数(a-f小写输出)输出到缓冲区
  • %X 格式化为无符号以十六进制表示的整数(a-f大写输出)输出到缓冲区
  • %0 格式化为无符号以八进制表示的整数输出到缓冲区
  • %g 格式化为自动选择合适的表示法输出到缓冲区

说明:

  1. 可以在"%"和字母之间插进数字表示最大场宽。例如: = 表示输出3位整型数,不够3位右对齐。%9.2f 表示输出场宽为9的浮点数,其中小数位为2,整数位为6,小数点占一位,不够9位右对齐。%8s 表示输出8个字符的字符串,不够8个字符右对齐。如果字符串的长度、或整型数位数超过说明的场宽,将按其实际长度输出。但对浮点数,若整数部分位数超过了说明的整数位宽度,将按实际整数位输出;若小数部分位数超过了说明的小数位宽度,则按说明的宽度以四舍五入输出。另外,若想在输出值前加一些0,就应在场宽项前加个0。例如: d 表示在输出一个小于4位的数值时,将在前面补0使其总宽度为4位。如果用浮点数表示字符或整型量的输出格式,小数点后的数字代表最大宽度,小数点前的数字代表最小宽度。例如: %6.9s 表示显示一个长度不小于6且不大于9的字符串。若大于9,则第9个字符以后的内容将被删除。
  2. 可以在"%"和字母之间加小写字母l,表示输出的是长型数。例如: %ld 表示输出long整数,%lf 表示输出double浮点数。
  3. 可以控制输出左对齐或右对齐,即在"%"和字母之间加入一个"-" 号可说明输出为左对齐,否则为右对齐。例如: %-7d 表示输出7位整数左对齐。%-10s 表示输出10个字符左对齐。

wsprintf只能输出字符,字符串和整型数据,要输出任意类型应该用swprintf

如果为了把float存入CString,
只需:
CString s;
float f= 5.345;
s.Format( "%f", f );
就做得到

wsprintf是Windows API,不支持浮点型格式输出;swprintf是C运行时函数,支持浮点型格式化输出。