c语言ASCII字符与Unicode字符的问题

来源:百度知道 编辑:UC知道 时间:2024/05/20 05:45:22
为什么我这样初始化一个char的字符没有错误产生呢?
int main()
{
char t = 'AB';
cout<<t<<endl;
return 0;
}
而输出的居然是B,哪位大哥给小弟将下其中的玄机。
还有
#include <iostream.h>
#include <WCHAR.H>
int main()
{

wchar_t c = L'A';
wchar_t *p = &c;
cout.setf(ios::hex);
cout<<c<<endl;
return 0;
}
我的理解是他应该输出ox0041可是输出的是41,到底怎么一会事有什么办法可以像ox0041这样输出一个Unicode字符的16进制表示啊!
d多谢了,不过第二个问题我是想让他不经过特别的处理就像输出一个指针一样!不知道可不可以

不同的编译器对此有不同的处理,
char t = 'AB';
比如GCC就是取t='B'就是最后的那个字符,而有些编译器是取'A'。但是基本上所有的编译器都不会对此报错

至于第2个问题嘛,cout可不可以我不知道,不过printf()是可以的
printf("%#06x",c);
#表示在前面加上0x标志
06表示数据占6位(包括0x),并补上0
x表示16进制

下面的是可以输出0x0041的

#include <iostream.h>
#include <stdio.h>
#include <WCHAR.H>
int main()
{

wchar_t c = L'A';
wchar_t *p = &c;
printf("%#06x",c);

return 0;
}

char t = 'AB';
不会报错,但会给出警告信息,等价于
char t = 'A';
char t = 'B';
所以会是B,即最后一个char

你可以改成
#include <iomanip.h>
cout<<setw(4)<<setfill('0')<<c<<endl;
表示打印占4个字节的位置,不够的用0填充