首页 > 大端模式小端模式

大端模式小端模式

考虑如下代码:

char *str="1234567890";
short result=(short)(*(str+2));
cout<<result<<endl;
result=*((short *)(str+4));
cout<<result<<endl;

假如你在你得笔记本上运行,输出结果是多少?

第一问我知道是51,字符'3'对应的short int为51
第二问是不是涉及到大端模式小端模式,这里提到笔记本应该是小端模式。
我所理解的大端模式,小端模式如下.
大端模式是例如1234567890,那么12存储在低地址,存储结构如下:
12 低地址
34
56
78
90 高地址
小端模式如下:
90 低地址
78
56
34
12 高地址
可是知道大端小端模式,看了电脑上得运行结果依然百事不得其解。
……………………………………………………分割线……………………………………………………
小白第一次发帖求解答,如果有什么不对的地方,请各位包含,不知道能不能在问这类问题。


  1. str是char*类型的指针,那么(str+4)是指向了字符'5'.

  2. *((short *)(addr))这里是告诉cpu如何去取这个指针指向的地址的数据。以*((short *)(addr))取,就是取2字节。以*((int *)(addr))取,就是取4字节。

  3. 大小端的问题来了。*((short *)(addr))这两字节怎么取。记住,数据的最小单元是字节,字节内部不会有大小端问题的,不管是大端还是小端,都是一样的。'5'就是ascii码0x35。'6'就是ascii码0x36。超过一字节的类型才有大小端问题。intel处理器是小端,从高字节往低字节取,所以是0x3635。


【热门文章】
【热门文章】