字符次序问题

来源:互联网 发布:淘宝刚开店卖什么 编辑:程序博客网 时间:2024/04/27 22:17

    今天碰一个关于字节顺序的问题,虽然看起来很简单,但一直都没怎么完全明白这个东西,索性就找了下资料,把它弄清楚.

    因为现行的计算机都是以八位一个字节为存储单位,那么一个16位的整数,也就是C语言中的short,在内存中可能有两种存储顺序big-endian和litte-endian.考虑一个short整数0x3132(0x32是低位,0x31是高位),把它赋值给一个short变量,那么它在内存中的存储可能有如下两种情况:
大端字节(Big-endian):
----------------->>>>>>>>内存地址增大方向
short变量地址
       0x1000                  0x1001
_____________________________
|                           |
|         0x31             |       0x32
|________________ | ________________
高位字节在低位字节的前面,也就是高位在内存地址低的一端.可以这样记住(大端->高位->在前->正常的逻辑顺序)
 
小端字节(little-endian):
----------------->>>>>>>>内存地址增大方向
short变量地址
       0x1000                  0x1001
_____________________________
|                           |

|         0x32             |       0x31

|________________ | ________________

低位字节在高位字节的前面,也就是低位在内存地址低的一端.可以这样记住(小端->低位->在前->与正常逻辑顺序相反)
big-endian:计算机体系结构中一种描述多字节存储顺序的术语,在这种机制
中最重要字节(MSB=most significat bit/byte)存放在最低端的地址上。采用这种机制的处理器有IBM3700系
列、PDP-10、Mortolora微处理器系列和绝大多数的RISC处理器。
little-endian:计算机体系结构中一种描述多字节存储顺序的术语,在这种机
制中最不重要字节(LSB=least siginficat bit/byte)存放在最低端的地址上。采用这种机制的处理器有PDP-11、
VAX、Intel系列微处理器和一些网络通信设备。该术语除了描述多字节存储顺序外
还常常用来描述一个字节中各个比特的排放次序。
下面是我写的一个例子:
#include <stdio.h>
#include<iostream>
void main( void )
{
        int test;
        int i;
        
        test = 0x41424344;  //(41ASIIC码的’A’,42ASIIC码的’B’)
      char* p= (char*)&test;
      for(i=0;i<=3;i++){
   printf("p adress %x",p);
     cout<<endl;
     p++;}
       cout<<sizeof(test);
}
好像用C++标准输出不对,还没查出为啥?
原创粉丝点击