在vc++上做了如下实现:
void main()
{
char pc = "我";
unsigned short me = unsigned short('我');
char *pc1 = (char )&me;
system("pause");
}
结果如图所示:
可见pc指针指向的‘我’ 和 me中存放的我‘我’字节顺序不一样,
这是什么原因?
pc = "我";改成 pc = L"我";
你是一个很细心的同学。这很好。
Intel处理器是一种小端处理器,对于short类型,它在内存中的分布是倒过来的。但是char不受这个约束。
http://www.cnblogs.com/graphics/archive/2011/04/22/2010662.html
对于多字节,Windows 平台是低字节优先的,称为小端;网络字节一般是高字节优先的,称为大端。
单字节,就按实际的顺序存贮。
试用TCHAR *pc = "我";
用TCHAR 结果
用TCHAR 结果
如下, 单字节排序不变, 多字节会倒过来
char* pc = "我"; // ce d2
char pc2[] = "ab"; // 61 62 00
unsigned short me = unsigned short('我'); // d2 ce
unsigned short me2 = 'ab'; // 62 61
// 所以在使用多字节表示字符串的时候要倒着写, 比如 mine
unsigned long signature = 'enim';