CString如何判断是双字节的字符

ralln 2015-03-18 10:26:58
比如,我定义了一个CString a = "宝贝,I LOVE YOU";
现在我需要将每个字用中括号扩起来,并赋值给CString b,也就是变成:b = "[宝][贝][,][I][ ][L][O][V][E][ ][Y][O][U]"

英文和空格好办,它们只占一个字节,可是汉字占2个字节,该怎么办?
如果是游戏昵称,会有其他的双字节符号比如日文,特殊符号五角星啦之类的,又该应该如何处理才能用中括号扩上呢?
...全文
332 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ralln 2015-03-20
  • 打赏
  • 举报
回复
引用 13 楼 u011391040 的回复:
[quote=引用 11 楼 ralln 的回复:] [quote=引用 3 楼 u011391040 的回复:] LZ可以使用UNICODE实现这个功能,UNICODE中所有的字符都是两个字节。
如何使用UNICODE?[/quote] CString在UNICODE环境下就是UNICODE字符串类,最简单的方式是将vs工程切换为UNICODE环境。[/quote] 已解决,多谢
zgl7903 2015-03-19
  • 打赏
  • 举报
回复
使用 UNICODE 编码
tomhe666 2015-03-19
  • 打赏
  • 举报
回复
CString str;
char ch = str[0]:
lougd 2015-03-19
  • 打赏
  • 举报
回复
引用 11 楼 ralln 的回复:
[quote=引用 3 楼 u011391040 的回复:] LZ可以使用UNICODE实现这个功能,UNICODE中所有的字符都是两个字节。
如何使用UNICODE?[/quote] CString在UNICODE环境下就是UNICODE字符串类,最简单的方式是将vs工程切换为UNICODE环境。
wshlwz 2015-03-19
  • 打赏
  • 举报
回复
MultiByteToWideChar
ralln 2015-03-19
  • 打赏
  • 举报
回复
引用 3 楼 u011391040 的回复:
LZ可以使用UNICODE实现这个功能,UNICODE中所有的字符都是两个字节。
如何使用UNICODE?
ralln 2015-03-19
  • 打赏
  • 举报
回复
引用 1 楼 tomhe666 的回复:
1. 如果不是宽字符的CString, 一个汉字他是占用两个字节的, 读取的时候先顺序判断读取到的第一个字节是否大于0x80, 如果是基本上他就是一个汉字, 接着读取后一个字节, 一般这两个字节都是大于0x80的, 如果读第一个字节就小0x80他就当作英文处理了 2.宽字符的CString不管英文汉字都是占用两个字节, 无上述问题
如何读取?
ralln 2015-03-19
  • 打赏
  • 举报
回复
引用 8 楼 xiaohuh421 的回复:
CString是一个宏定义. 根据你的IDE编译字符集不同而定义成不同形式. 当你的字符集设置成 多字符集时, CString 实际 就是CStringA 当你的字符集设置成 UNICODE时, CString 实际上是CStringW. 所以如果你需要UNICODE的串, 请直接这么用: CStringW tStr = L"宝贝,I LOVE YOU"; //注意那个L 需要ASCII串就是 CStringA tStr = "宝贝,I LOVE YOU";
引用 8 楼 xiaohuh421 的回复:
CString是一个宏定义. 根据你的IDE编译字符集不同而定义成不同形式. 当你的字符集设置成 多字符集时, CString 实际 就是CStringA 当你的字符集设置成 UNICODE时, CString 实际上是CStringW. 所以如果你需要UNICODE的串, 请直接这么用: CStringW tStr = L"宝贝,I LOVE YOU"; //注意那个L 需要ASCII串就是 CStringA tStr = "宝贝,I LOVE YOU";
VC6.0里面没有CStringW和CStringA类型啊
xiaohuh421 2015-03-19
  • 打赏
  • 举报
回复
CString是一个宏定义. 根据你的IDE编译字符集不同而定义成不同形式. 当你的字符集设置成 多字符集时, CString 实际 就是CStringA 当你的字符集设置成 UNICODE时, CString 实际上是CStringW. 所以如果你需要UNICODE的串, 请直接这么用: CStringW tStr = L"宝贝,I LOVE YOU"; //注意那个L 需要ASCII串就是 CStringA tStr = "宝贝,I LOVE YOU";
worldy 2015-03-18
  • 打赏
  • 举报
回复
看你是什么编码格式,ansi(如你描述的)、unicode(每个字符2个字节)UTF-8、UTF-16等等,不同方式字符的判断都不一样
lougd 2015-03-18
  • 打赏
  • 举报
回复
LZ可以使用UNICODE实现这个功能,UNICODE中所有的字符都是两个字节。
笨笨仔 2015-03-18
  • 打赏
  • 举报
回复
1、CString 是一个指针 2、在Unicode中,每个字(不管汉字还是字母)都占用2字节 3、要获取字串长度可使用CString的成员函数
tomhe666 2015-03-18
  • 打赏
  • 举报
回复
1. 如果不是宽字符的CString, 一个汉字他是占用两个字节的, 读取的时候先顺序判断读取到的第一个字节是否大于0x80, 如果是基本上他就是一个汉字, 接着读取后一个字节, 一般这两个字节都是大于0x80的, 如果读第一个字节就小0x80他就当作英文处理了 2.宽字符的CString不管英文汉字都是占用两个字节, 无上述问题
likfeng 2015-03-18
  • 打赏
  • 举报
回复
Unicode不用说了 非Unicode可以用函数转换一下 ansi->unicode 处理 unicode->ansi
wyx100 2015-03-18
  • 打赏
  • 举报
回复
引用 2 楼 wxhxj0268 的回复:
1、CString 是一个指针 2、在Unicode中,每个字(不管汉字还是字母)都占用2字节 3、要获取字串长度可使用CString的成员函数

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧