社区
界面
帖子详情
在Unicode条件下"中国"的内码是:0xd0d6,0xfab9,而在MBCS时是0x4e2d, 0x56fd,请问如何互相转换
寒雪叔叔
2007-08-02 09:26:33
在Unicode条件下"中国"的内码是:0xd0d6,0xfab9,而在MBCS时是0x4e2d, 0x56fd,请问如何互相转换
我写的程序是Unicode的,但在读取一个ANSI的字符串进行比较时出了问题,两个相同的字符串由于采用了不同内码而不能正确的比较,所以我想将其中一个汉字的内码进行转换以便于比较。
...全文
405
5
打赏
收藏
在Unicode条件下"中国"的内码是:0xd0d6,0xfab9,而在MBCS时是0x4e2d, 0x56fd,请问如何互相转换
在Unicode条件下"中国"的内码是:0xd0d6,0xfab9,而在MBCS时是0x4e2d, 0x56fd,请问如何互相转换 我写的程序是Unicode的,但在读取一个ANSI的字符串进行比较时出了问题,两个相同的字符串由于采用了不同内码而不能正确的比较,所以我想将其中一个汉字的内码进行转换以便于比较。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
寒雪叔叔
2007-08-02
打赏
举报
回复
感谢感谢,马上结贴
WindAndSnow
2007-08-02
打赏
举报
回复
DL
yxz_lp
2007-08-02
打赏
举报
回复
http://noshape.bokee.com/4749054.html
david2083
2007-08-02
打赏
举报
回复
#include <stdio.h>
#include <windows.h>
wchar_t s1[] = L"中国";
char s2[] = "中国";
char s3[10];
wchar_t s4[10];
int main()
{
for(int i=0;i<2;i++)
printf("%04x ",s1[i]);
printf("\n");
for(int i=0;i<4;i++)
printf("%02x ",(unsigned char)s2[i]);
printf("\n");
WideCharToMultiByte(CP_ACP,0,s1,2,s3,10,0,0);
MultiByteToWideChar(CP_ACP,0,s2,4,s4,10);
for(int i=0;i<4;i++)
printf("%02x ",(unsigned char)s3[i]);
printf("\n");
for(int i=0;i<2;i++)
printf("%04x ",s4[i]);
printf("\n");
}
寒雪叔叔
2007-08-02
打赏
举报
回复
不好意思,上面内码示例我搞反了,应该是Unicode条件下“中国”的内码是0x4e2d, 0x56fd,而MBCS时是:0xd0d6,0xfab9!!!
我试图用WideCharToMultiByte来进行转换,但不行,这个函数似乎只是简单的将一个汉字转成了相同值的两个字符,比如"中"转成了[0xd6][0xd0],而我想得到的是[0x2d][0x4e]
MBCS
与
Unicode
码制分析
本文并不打算讲解
Unicode
的编码问题,因为本文主要对以下几个问题提一些见解:1.
MBCS
多字节码的原理?2.
MBCS
与
Unicode
的关系?3.
MBCS
与
Unicode
的
转换
?4.
MBCS
与
Unicode
的打印,乱码解决? 早在Windows采用
Unicode
统一编码进行语言管理之前,Windows为了能够进行非ANSI标准字符的输出,于是采用两个字节来表示这些
汉字编码与编程相关问题总结:ASCII、机
内码
、区位码、国标码、
Unicode
码是如何
转换
的
其中一个原因是:0x00在C语言及操作系统文件名(等..)中有特殊意义(如字符串结尾),然而按照
Unicode
编码的话,很可能这个字符的第一个字节(高字节)为非零数值,而低字节为零,这样C语言就会误认为这是字符串的结尾.所以UTF-8的一个功能是保证
Unicode
编码表中不出现0x00(当然正常的0x00是可以的)从ASCII、GB2312、GBK到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。GB2312的两个字节的最高位都是1。
[编码]
Unicode
/
MBCS
基础知识
MBCS
/
Unicode
的基础知识
unicode
和
MBCS
1: 首先更改项目属性为多字节字符集.
2: 对于所有 L"字符串", 去掉L, 或改为=> _T("字符串")
ps1: _T是个自动替换的宏, 可以根据编译
条件
的不同, 替换成不同的东西.
ps2:若想使用_T,要先包含
文件
3: 替换所有的 WCHAR 为 TCHAR
4: 替换所有的
Unicode
函数为非
Unicode
函数 eg _wsplitpath_s => _splitpath_s
Unicode
字符编码表|汉字
Unicode
编码的区间为:
0x4E
00→0x9FA5(转)
十进制 十六进制 字符数 编码分类(中文) 编码分类(英文) 起始 终止 起始 终止 (个) 0 127 0000 007F 128 C0控制符及基本拉丁文 C0 Control and Basic Latin 128 255 0080 00FF 128 C1控制符及拉
界面
15,976
社区成员
115,866
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章