VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 328|回复: 9

什么功能wchar_t能做char不行(为啥删我帖子)

[复制链接]
44_avatar_middle
最佳答案
0 
在线会员 发表于 2020-12-18 15:01:42 | 显示全部楼层 |阅读模式
char是一个字节,有255个状态,视频上说是容量不够,才出现这个wchar_。有没有什么例子可以说明一下哪种情况下只能用wchar_t而不能用char的,因为是看视频里char也能存中文啊。比如我现在要存 啊啊啊 哈哈哈 呵呵呵 都可以存在char* P里,wchar_t的意义是什么




上一篇:MFC 双边滤波
下一篇:玩转控件第3课,按钮ID改变还是执行原来那套函数问题
08_avatar_middle
最佳答案
9 
在线会员 发表于 2020-12-18 18:23:48 | 显示全部楼层
本帖最后由 SummerGull 于 2020-12-18 19:34 编辑

你的原帖子是 没有 标题 没有内容。我举报的。 真违规
w是 宽的意思
char可以存放中文 但是 代表的是可变字符。
首先你得知道 什么是ASCII 编码。还得了解Unicode 还有多字节。
这里我简单举例。
一般的  char 都是 8位 1字节 也就是说 他可以存放  2^8 个不同的字符。
TIPS:历史 原因 本来是用 7 位的 。后来改版用了 8位。  {这个不用管 就当 2^8}
char *p = "你好呀";
这代码 代表了 使用 非Uincode编码 但是 是可以变宽度字符。
也就是说 “ABCD” 用 8位1字节存储
"你好呀" 使用 16位 2字节存储。这就是可变宽度字符。
Unicode 是 任何情况都是 16/32 (2/4字节)位长度的。包括了 “ABCD”"你好呀" 都是按 2字节/4字节来存储的。
这里的 2/4字节 就是 Unicode16/Unicode32,也就是 wchar_t,一般前面带上L。了解即可。不需要深入 除非你要 改革计算机 搞计算机科研项目。那么需要深入了解的。需要观看一些有名的书籍!

点评

讲得详细直白,666  发表于 2020-12-18 18:57
70_avatar_middle
最佳答案
47 
在线会员 发表于 2020-12-18 18:30:57 | 显示全部楼层
如果用 char  你在自己电脑上编译出来的程序 ,在其他语言(比如英语)的电脑上运行,就是乱码;
用w_char 就不会出现这种问题 ;
同样的char(ANSI)字符串 ,会根据不同国家地区解析显示出不同的文字
w_char(UNICODE/UTF16)是统一的,各个系统都会解析显示出同样的文字

评分

参与人数 1驿站币 +2 热心值 +2 收起 理由
08_avatar_small SummerGull + 2 + 2 老哥说的很对。

查看全部评分

44_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-12-18 18:48:44 | 显示全部楼层
SummerGull 发表于 2020-12-18 18:23
你的原帖子是 没有 标题 没有内容。我举报的。 真违规
w是 宽的意思
char可以存放中文 但是 前面要带上 L ...

好抽象,wchar_出现的意义肯定是因为char满足不了,能不能这样举个例子,因为怎么怎么样char满足不了,所以有wchat_t的产生。
char* P = “啊啊啊啊”;不需要带L啊,然后你说char只能存2^8不同的字符这个我理解的,255个状态。我不理解的是中文显示,就是说哪个字都能显示,阿斯顿发过火就看了这些车去玩儿让他与你哦,这些我随便打的,都可以显示,这么多文字,255个状态肯定不够啊,为什么还能每个字都显示

评分

参与人数 1驿站币 +1 收起 理由
08_avatar_small SummerGull + 1 这里错了 是wchar_t带L。

查看全部评分

08_avatar_middle
最佳答案
9 
在线会员 发表于 2020-12-18 19:28:03 | 显示全部楼层
本帖最后由 SummerGull 于 2020-12-18 19:56 编辑
a86116403 发表于 2020-12-18 18:48
好抽象,wchar_出现的意义肯定是因为char满足不了,能不能这样举个例子,因为怎么怎么样char满足不了,所 ...


老哥 我觉得你开始 悟了。当初我也是想不明白为什么 会有 wchar_t 出现的意义为啥。
也一直在思考 为什么 他们 总是在说  “英文 使用cahr足够了可是 中文却不够。”
我们有相同的问题。
后来 有一天 我悟了。
因为汉字 有8000多个呀。英文总共 26个字母 无限的组合。可是 汉字摆明了 就是8000个。
也就是说。 255个格子不够存放。
再加上世界的 文字,绝对不够的。 然后 2^16次方 有多少个格子?。足够了把。
这里又出现一个问题。我不知道 你想到了没。我先不说了 没有问题是解决当下最好的思路。
这里你的有个问题是 为啥能显示中文。
因为这时候就不是 单纯的 255个格子了。那他是 可变宽字节了。也就是说 英文是 1字节。中文是 2个字节存储。所以叫做 多字节编码。
这个多字节编码 是在 ASCII 上面演化的。具体 有本书  我忘记了 是不是那本书上写的 看过很多书。但是知道原理。
简单来说  科学家 为了 让其他语言也能 在计算机显示 又避免浪费空间。 演化出来了 多字节编码。现在的计算机 基础是 多字节编码。
真正的 ASCII编码 因该是没了,你看下你键盘 就是 ASCII 的全部字符数。

点评

我个人建议。这东西 太细致,先了解。以后有机会深入,不影响你编程。但是了解需要的。  发表于 2020-12-18 19:57
能做的不能做的。具体看 3楼的回答。  发表于 2020-12-18 19:50
08_avatar_middle
最佳答案
9 
在线会员 发表于 2020-12-18 19:43:01 | 显示全部楼层
顺便提一句。W是宽版本 T是通用版本
在WIndows下编程你会接触到很多 T /W 大头的 API。 了解这个你就没问题了。
T是通用的 按照你当前编译的 编码方式进行读取。
编码方式在 项目属性 ->高级选项 里面可以看到。
什么功能wchar_t能做char不行(为啥删我帖子)

这里我用 T版本 (W版本)和 A版本 写了两个 MSG
什么功能wchar_t能做char不行(为啥删我帖子)

然后通过反汇编可以看出
T版本实际调用 W。
A版本就是A版本
什么功能wchar_t能做char不行(为啥删我帖子)

评分

参与人数 1驿站币 +1 热心值 +1 收起 理由
70_avatar_small tony666 + 1 + 1 太详细了,怒赞!

查看全部评分

44_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-12-19 00:26:19 | 显示全部楼层
这个我要好好想想  多看几边
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2021-8-1 19:36

Powered by CcTry.CoM

© 2009-2021 cctry.com

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