把long 数据331056848的十六进制形式放在char   sz[4];里,即:   
  sz[0]=0x13;   
  sz[1]=0xbb;   
  sz[2]=0x86;   
  sz[3]=0xd0;   
  怎样做? 
也就是说 331056848的16进制数位0x13bb86d0然后分别将这些数据写入到一个数组中!

解决方案 »

  1.   

    int A = 0x13bb86d0;
    for(int i = 3,int j = 0; i >= 0; i-- , j++)
    {
         sz[i] = A >> j; 
    }
      

  2.   

    1、2楼的办法很好
    int A = 0x13bb86d0;
    for(int i = 3,int j = 0; i >= 0; i-- , j++)
    {
         sz[i] = A >> (j*8)
    }
      

  3.   

    int A = 0x13bb86d0;
    for(int i = 3,int j = 0; i >= 0; i-- , j++)
    {
         sz[i] = A >> (j*8)
    }
      

  4.   

    int A=0x13bb86d0;
    char sz[4];
    memcpy(sz,&A,sizeof(sz));//sz[0]=0xd0,sz[1]=0x86,sz[2]=0xbb,sz[3]=0x13
      

  5.   

    很简单,假设int a = 12345678
    char *p;
    char sz[4];
    p = (char*)a;
    strncpy(sz,p,4);
      

  6.   

    对了那个数组太小了,应该是char sz[5];
      

  7.   

    对不起我看错了,你那不是intel机的字节序,应该
    sz[0] = char((a&0xff000000)>>24);
    sz[1] = char((a&0xff0000)>>16);
    sz[2] = char((a&0xff00)>>8);
    sz[2] =char ((a&0xff));
      

  8.   

    long A = 0x13bb86d0;
    DWORD B = A;
    for(int i = 3;i >= 0;i--)

        sz[i] = B; //或语义更明确sz[i] = B & 0XFF;
        B >>= 8; 
    }
      

  9.   

    最省CPU指令的算法
    long A = 0x13bb86d0; 
    char *p; 
    char sz[4]; 
    p = (char*)a; 
    sz[0] = p[3];
    sz[1] = p[2];
    sz[2] = p[1];
    sz[3] = p[0];
      

  10.   

    这样也可以吧int nTemp = 0x13bb86d0;
    memcpy(sz, (char *)&nTemp , 4);
      

  11.   

    看楼主怎么想了,我赞成14楼的做法,但要注意CPU存放数据是重地位开始放起的楼主要注意long的时候的顺序