VS 2017下源码

 #include<stdio.h>

 int main()
{
char ASC_a = 'a';
char *ASC_str = "hello";
wchar_t W_a = 'a';
wchar_t *W_str = "hello";
printf("ASC_a = %c\n", ASC_a);
printf("sizeof(ASC_a) = %d\n", sizeof(ASC_a));
printf("ASC_str = %s\n", ASC_str);
/* 打印ASC_a的内存 */
printf("ASC_a = 0x%x\n", &ASC_a); printf("W_a = %c\n", W_a);
printf("sizeof(W_a) = %d\n", sizeof(W_a));
printf("W_str = %s\n", W_str);
/* 打印W_a的内存 */
printf("W_a = 0x%x,0x%x\n", *((char*)&W_a), *(((char*)&W_a)+)); getchar();
return ;
}

运行结果

wchar_t *W_str = "hello";

对于宽字符串,如果使用printf("W_str = %s\n", W_str);可能不会打印出完整的字符串,而只显示第一个字符。

其原因是因为:宽字符占用2Byte,第二个字节就是\0。printf以为自己到头了,所以只打印一个字节。对printf使用%S参数,或者使用wprintf来避免这一问题。我手上的是VS 2017,使用printf("W_str = %s\n", W_str);居然也可以正常打印,其他版本的VS估计不行。

如果是其他版本的VS,可能需要在宽字符前面加L,打印宽字符串需要使用%S。这时候源码如下

 #include<stdio.h>

 int main()
{
char ASC_a = 'a';
char *ASC_str = "hello";
wchar_t W_a = L'a';
wchar_t *W_str = L"hello";
printf("ASC_a = %c\n", ASC_a);
printf("sizeof(ASC_a) = %d\n", sizeof(ASC_a));
printf("ASC_str = %s\n", ASC_str);
/* 打印ASC_a的内存 */
printf("ASC_a = 0x%x\n", &ASC_a); printf("W_a = %c\n", W_a);
printf("sizeof(W_a) = %d\n", sizeof(W_a));
printf("W_str = %S\n", W_str);
/* 打印W_a的内存 */
printf("W_a = 0x%x,0x%x\n", *((char*)&W_a), *(((char*)&W_a)+)); getchar();
return ;
}

还可以使用TCHAR无脑处理Unicode ASCII。如果定义了_UNICODE,那么TCHAR = wchar_t,否则位char。如果定义了_UNICODE,那么_TEXT=L,否则_TEXT=空

 #include<tchar.h>

 int main()
{
TCHAR ASC_a = 'a';
TCHAR *ASC_str = "hello";
TCHAR W_a = L'a';
TCHAR *W_str = L"hello";
_tprintf(_TEXT("ASC_a = %c\n"), ASC_a);
_tprintf(_TEXT("sizeof(ASC_a) = %d\n"), sizeof(ASC_a));
_tprintf(_TEXT("ASC_str = %s\n"), ASC_str);
/* 打印ASC_a的内存 */
_tprintf(_TEXT("ASC_a = 0x%x\n"), &ASC_a); _tprintf(_TEXT("W_a = %c\n"), W_a);
_tprintf(_TEXT("sizeof(W_a) = %d\n"), sizeof(W_a));
_tprintf(_TEXT("W_str = %s\n"), W_str);
/* 打印W_a的内存 */
_tprintf(_TEXT("W_a = 0x%x,0x%x\n"), *((char*)&W_a), *(((char*)&W_a)+)); _gettchar();
return ;
}

如果包含了Windows.h,就不用写_TEXT了,使用TEXT

04 Windows编程——Unicode的更多相关文章

  1. 【Windows编程】系列第四篇:使用Unicode编程

    上一篇我们学习了Windows编程的文本及字体输出,在以上几篇的实例中也出现了一些带有“TEXT”的Windows宏定义,有朋友留言想了解一些ANSI和Unicode编程方面的内容,本章就来了解和学习 ...

  2. Windows编程中UNICODE和_UNICODE定义问题

    Windows编程中UNICODE和_UNICODE定义问题 先转一篇文章: 初学Windows SDK编程时碰到过这个问题,相信很多初学Windows编程的人也都碰到过,后来慢慢搞明白些了,但有时别 ...

  3. windows 编程—— 宽字符集 与 Unicode

    目录: 从ASCII码 到 Unicode Windows 编程中的 "字符” 定义 (如何在windows下进行通用编码) 常用的通用函数,定义 (本文为学习<Programming ...

  4. 【Windows编程】系列第六篇:创建Toolbar与Statusbar

    上一篇我们学习了解了如何使用Windows GDI画图,该应用程序都是光光的静态窗口,我们使用Windows应用程序,但凡稍微复杂一点的程序都会有工具栏和状态栏,工具栏主要用于一些快捷功能按钮.比如典 ...

  5. 【Windows编程】系列第五篇:GDI图形绘制

    上两篇我们学习了文本字符输出以及Unicode编写程序,知道如何用常见Win32输出文本字符串,这一篇我们来学习Windows编程中另一个非常重要的部分GDI图形绘图.Windows的GDI函数包含数 ...

  6. 【Windows编程】系列第九篇:剪贴板使用

    上一篇我们学习了常见的通用对话框,本篇来了解剪贴板的使用,它常用于复制粘贴功能. 剪贴板是Windows最早就加入的功能,由于该功能非常实用,我们几乎每天都会使用到.通过剪贴板,我们就可以将数据从一个 ...

  7. windows 编程—— 学习指导

    这里有一份很好的资源,被制作成chm文件的<Windows 程序设计>,包含了中文版和英文版,还有全书源代码,虽然不知道是谁出版的,但是感觉对Windows编程新手来说还是很不错的.关键还 ...

  8. 有一定基础的 C++ 学习者该怎样学习 Windows 编程?

    人的心理有个奇异的特性:一项知识一旦学会之后,学习过程中面临的困惑和不解非常快就会忘得干干净净,似乎一切都是自然而然,本来就该这种.因此,关于「怎样入门」这类问题,找顶尖高手来回答,未必能比一个刚入门 ...

  9. Windows 编程中恼人的各种字符以及字符指针类型

    在Windows编程中,很容易见到这些数据类型:LPSTR,LPTSTR,LPCTSTR... 像很多童鞋一样,当初在学Windows编程的时候,对着些数据类型真的是丈二和尚,摸不着头脑,长时间不用就 ...

随机推荐

  1. php-fpm优化参数介绍

    1.php-fpm优化参数介绍他们分别是:pm.pm.max_children.pm.start_servers.pm.min_spare_servers.pm.max_spare_servers. ...

  2. MongoDB集群之分片技术应用 —— 学习笔记

    课程链接:https://www.imooc.com/learn/501 一.什么是分片? 分片:将数据进行2拆分,将数据水平的分散到不同的服务器上. 二.为什么要分片? 架构上:读写均衡.去中心化 ...

  3. Yarn使用笔记

    1.安装需要下载安装包(这里只介绍windows系统的安装) 安装成功,会如图提示! 版本号:Yarn安装包-yarn-0.24.6 安装包下载地址:链接:http://pan.baidu.com/s ...

  4. JS通过ActiveX读写ini配置文件

    String.prototype.trim = function(){ return this.replace(/(^\s+)|(\s+$)/g, ''); }; IniConfig = functi ...

  5. (生鲜项目)06. django的view实现商品列表页

    使用原始的django的View来返回json格式的商品列表 目的是回顾一些django的基础知识, 好与后面的RESTful做对比 goods.views_base.py from django.v ...

  6. 基于Jquery ui 可复用的酒店 web页面选择入住日期插件

    效果图: 代码: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" ...

  7. OpenCV Python 4.0安装

    1.安装OpenCV-Python 如果你是第一次使用OpenCV Python开发包,想要安装OpenCV Python4.0只要执行如下命令行即可: pip install opencv-pyth ...

  8. EF-初识

    什么是ORM 起源随着编程的发展,程序里都是面向对象啥的,但是数据库发展呢  网状数据库 ->层次数据库 ->关系数据库(当然还有nosql数据库  我们只是做热数据缓存  后面将会讲到) ...

  9. 某 游戏公司 php 面试题

    1.实现未知宽高元素的水平垂直居中,至少两种方法. <div, class="father"> <div class="son">< ...

  10. ubuntu maven jdk

    https://blog.csdn.net/zrgood123/article/details/82894447 这里是将环境变量配置在etc/profile,即为所有用户配置JDK环境. 使用命令打 ...