在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运行时函数,支持浮点型格式化输出。

C++小知识之wsprintf使用的更多相关文章

  1. 蓝牙Bluetooth技术小知识

    蓝牙Bluetooth技术以及广泛的应用于各种设备,并将继续在物联网IoT领域担任重要角色.下面搜集整理了一些关于蓝牙技术的小知识,以备参考. 蓝牙Bluetooth技术始创于1994年,其名字来源于 ...

  2. HTML+CSS中的一些小知识

    今天分享一些HTML.CSS的小知识,希望能够对大家有所帮助! 1.解决网页乱码的问题:最重要的是要保证各个环节的字符编码一致! (1)编辑器的编辑环境的字符集(默认字符集):Crtl+U 常见的编码 ...

  3. iOS APP开发的小知识(分享)

          亿合科技小编发现从2007年第一款智能手机横空出世,由此开启了人们的移动智能时代.我们从一开始对APP的陌生,到现在的爱不释手,可见APP开发的出现对我们的生活改变有多巨大.而iOS AP ...

  4. Unix系统小知识(转)

    Unix操作系统的小知识 2.VI添加行号/翻页/清屏 .在对话模式时(即输完Esc再输入: ),输入“:set number”可以将编辑的文本加上行号.跟玩俄罗斯方块一样方便的上下左右移动箭头的快捷 ...

  5. salesforce 零基础开发入门学习(十)IDE便捷小知识

    在这里介绍两个IDE的便捷开发的小知识. 一) 本地调试 由于salesforce代码只能提交以后才能调试,所以很多时候调试代码很麻烦.新版增加了一个特性:即可以在本地调试相关的代码或者查看相关代码运 ...

  6. Jquery:小知识;

    Jquery:小知识: jQuery学习笔记(二):this相关问题及选择器   上一节的遗留问题,关于this的相关问题,先来解决一下. this的相关问题 this指代的是什么 这个应该是比较好理 ...

  7. HTML小知识---Label

    今天知道了一个html小知识: <input type="checkbox" id="chkVersion" />                 ...

  8. Unicode和汉字编码小知识

    Unicode和汉字编码小知识 将汉字进行UNICODE编码,如:“王”编码后就成了“\王”,UNICODE字符以\u开始,后面有4个数字或者字母,所有字符都是16进制的数字,每两位表示的256以内的 ...

  9. Java异常的一个小知识

    有以下两个代码: package com.lk.A; public class Test3 { public static void main(String[] args) { try { int a ...

随机推荐

  1. (转)iOS7界面设计规范(10) - UI基础 - 文字排版与配色

    明天就是周四了.貌似前几天还在恨周一呢.话说今天几乎开了一整天的会,正经事情没做多少:这种感觉比一整天从早到晚12个小时的忙碌于一件事情还要让人感到疲惫的对叭?那今天的iOS7设计规范更新又是一篇很简 ...

  2. [Redux] Extracting Container Components -- VisibleTodoList

    Code to be refacted: const TodoList = ({ todos, onTodoClick }) => ( <ul> {todos.map(todo =& ...

  3. OLE操作Excel编译错误处理

      Excel在公司用的很多,而这个东西我用的不是很好,就想用程序来处理,遇到很多错误.这几天研究了下OLE操作Excel.环境:VS2008 SP1+Excel 2007 加入OLE Type Li ...

  4. 支持多QQ登录的软件

    支持多QQ登录,批量加好友,批量回复QQ消息,当然也能接收 下载链接:多QQ登录软件

  5. Java中日期时间API小结

    Java中为处理日期和时间提供了大量的API,确实有把一件简单的事情搞复杂的嫌疑,各种类:Date Time Timestamp Calendar...,但是如果能够看到时间处理的本质就可以轻松hol ...

  6. RMAN的show,list,crosscheck,delete命令

    1.SHOW命令:      显示rman配置: RMAN> show all; 2.REPORT命令: 2.1.RMAN> report schema 报告目标数据库的物理结构; 2.2 ...

  7. Server.HTMLEncode用法

    Server.HTMLEncode用法!! Server.HTMLEncode HTMLEncode 一.HTMLEncode 方法对指定的字符串应用 HTML 编码. 语法 Server.HTMLE ...

  8. Js得到radiobuttonlist选中值,设置默认值

    JS 代码 var vRbtid=document.getElementById("rbtid");      //得到所有radio      var vRbtidList= v ...

  9. SSM框架搭建web服务器实现登录功能(Spring+SpringMVC+Mybatis)

    初学java EE,虽然知道使用框架会使开发更加便捷高效,但是对于初学者来说,感到使用框架比较迷惑,尤其是各种jar包的引用.各种框架的配置.注解的使用等等. 最好的学习方法就是实践,于是下载了一个现 ...

  10. C#中KeyDown和KeyPress区别

    1.比如说TexBox 输入'a' 按下->触发KeyDown事件,然后去处理 ->将a显示输入到文本框后 ->触发KeyPress事件