2 freshmanjq freshmanjq 于 2015.07.10 23:30 提问

c语言中文字符串的存放顺序

在vc++上做了如下实现:
void main()
{
char pc = "我";
unsigned short me = unsigned short('我');
char *pc1 = (char
)&me;

system("pause");

}
结果如图所示:
图片说明
可见pc指针指向的‘我’ 和 me中存放的我‘我’字节顺序不一样,
这是什么原因?

7个回答

GKatHere
GKatHere   2015.07.11 12:54

如下, 单字节排序不变, 多字节会倒过来

            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';  
freshmanjq
freshmanjq 谢谢,明白了。
2 年多之前 回复
frank_20080215
frank_20080215   2015.07.10 23:33

pc = "我";改成 pc = L"我";

freshmanjq
freshmanjq 你好,谢谢你的回复,但不能这样过, “我”是字符串,不是字符
2 年多之前 回复
devmiao
devmiao   Ds   Rxr 2015.07.10 23:38

你是一个很细心的同学。这很好。
Intel处理器是一种小端处理器,对于short类型,它在内存中的分布是倒过来的。但是char不受这个约束。

http://www.cnblogs.com/graphics/archive/2011/04/22/2010662.html

devmiao
devmiao 回复freshmanjq: 一个是short,亿个是char。我说的很清楚了。
2 年多之前 回复
freshmanjq
freshmanjq 你好, 现在问题是, me 中的“我”是小端的, 而pc指向的"我"是大端
2 年多之前 回复
91program
91program   Ds   Rxr 2015.07.11 09:00

对于多字节,Windows 平台是低字节优先的,称为小端;网络字节一般是高字节优先的,称为大端。
单字节,就按实际的顺序存贮。

freshmanjq
freshmanjq 你好, 你的意思是说 声明字符串 是网络字节 吗?
2 年多之前 回复
frank_20080215
frank_20080215   2015.07.11 09:27

试用TCHAR *pc = "我";

freshmanjq
freshmanjq 没有区别,我看到winNT.h 定义了TCHAR,这么定义的 typedef char TCHAR, *PTCHAR; 和 char没有区别
2 年多之前 回复
freshmanjq
freshmanjq   2015.07.11 09:46

用TCHAR 结果
图片说明

freshmanjq
freshmanjq   2015.07.11 09:47

用TCHAR 结果
图片说明

Csdn user default icon
上传中...
上传图片
插入图片