在X86系统中,如下变量在内存中的字节存放顺序。
DWORD Value1=0x8010011c                              
UINT  Value2=12801

解决方案 »

  1.   

    如果是栈内对象,应该是你申明的顺序一样,Value1 在栈底部。Value2在栈顶部。
      

  2.   

    地址从小到大: 1C 01 10 80   (Value1)
                  01 32 00 00   (Value2)
      

  3.   

    可以用字节Copy来了解。或可以用联合来知道字节的存放顺序。
      

  4.   

    回复人: blackblue(跌跌撞撞) ( ) 信誉:100  2003-06-20 10:03:00  得分:0 
     
     
      地址从小到大: 1C 01 10 80   (Value1)
                  01 32 00 00   (Value2)
      
     
    你能给出为什么会是上面的结果吗?
      

  5.   

    我觉得是
    10 80 1c 01 (value1)
    01 32 00 00 (value2)
    x86中存放数据回自动把颠倒顺序,但在读取时,又回还原
      

  6.   

    正确解释应该是这样的吧:
    数据在内存中的存放形式应该是从低字节开始到高字节的,所以在x86系统(我也不知道那到底是一个什么样的系统,希望有人难给出一个准确的定义,哎,白读了四年的计算机本科啊)中,DWORD(unsigned long)和UINT(unsigned int)都是占用四个字节的吧,若是的话,就应该是下面这样的:
    (从低字节--->高字节)
    80 10 01 1C (Value1)
    00 00 32 01 (Value2)望高手指教!
      

  7.   

    那应该是:(从高字节--->低字节)00 00 32 01 (Value2)
    80 10 01 1C  (Value1)
      

  8.   

    以字节为单位,颠倒放置,即:WORD 类型:低字节在前,高字节在后
    DWORD 类型:低字在前,高字在后。每个字内如WORD类型放置。80X86就是这样的,没有为什么。用下面函数看看,一个字或双字在内存中的放置情况:// 功能: 将一个字节数组格式化为一个二进制字符串
    // 入口: pszStr :字符串数组的指针,nLen 字符串长度
    // pByte : 字节数组指针, nSize :字节数组大小
    // 出口: pszStr : 格式化后的字符数组指针
    // 示例: 8 - > "00001000"
    bool FormatBin(PTSTR pszStr, int nLen, BYTE* pByte, int nSize)
    {
    if (nSize*8+1 > nLen) return false;
    BYTE Mask = 0x80;
    for (int n=0; n<nSize; n++, pByte++)
    {
    for(int k=0; k<8; k++)
    {
    *pszStr++ = ((*pByte)&(Mask>>k)) ? '1' : '0';
    }
    }
    *pszStr = '\0';
    return true;
    }
    //测试:DWORD dw = 12;
    DWORD w = 13;
    TCHAR strDW[40];
    TCHAR strW[20];
    FormatBin(strDW, 40, &dw, sizeof(DWORD);
    FormatBin(strW, 20, &w, sizeof(WORD));
    //看看strDW, strW中是什么?
      

  9.   

    低字节在前(即低字节在低地址)
    以0x8010011c为例, 应为1c 01 10 80
      

  10.   

    经调试后,得到的结果是这样的:
    内存变量先定义就先分配,这个没错吧所以
    (从高字节--->低字节)80 10 01 1C  (Value1)
    00 00 32 01 (Value2)是没错的