定义一个数组char Data[6]={0x33,0x04,0x00,0x00,0x00,0x00};后面4位放整形的十六进制,如int aa=253,那么aa的十六进制是0xFD,则Data[6]={0x33,0x04,0x00,0x00,0x00,0xFD}是我要发送的十六进制。就是说我要把一个整形数转成16进制发送给别人。那如果一个数大于255,我该如何把它转成我想要的十六进制放在这个数组里呢,不足4位的前面补0,有什么函数没?请各位大侠帮帮忙,我知道一个数在内存中都是以2进制存得,所以没有数值转换这一说,可是我们的协议就是我给别人发16进制,别人收16进制,这里我有点迷糊,请指点一下,谢谢环境为VS2005

解决方案 »

  1.   

    char Data[6]={0x33,0x04,0x00,0x00,0x00,0x00};等同于
    char Data[6]={51,4,0,0,0,0};
      

  2.   

    char Data[6]={0x33,0x04,0x00,0x00,0x00,0x00};
    int aa=300;*(int*)&Data[2]=aa; //ntohl(aa)
    //memcpy(&Data[2], &aa, sizeof(aa));
      

  3.   

    char Data[6]={0x33,0x04,0x00,0x00,0x00,0x00};int  *x=(int*)(&Data[2]);*x=aa;就可以了每次你*x=aa;之后,比如*x=123456;Data[2],Data[3],Data[4],Dataa[5]的值就自动填好了
      

  4.   

    那如果一个数大于255,我该如何把它转成我想要的十六进制放在这个数组里呢,不足4位的前面补0,有什么函数没
    ---------------
    那可以使用LOWORD(),HIWORD(), LOBYTE(), HIBYTE();存入数组中
      

  5.   

    hezhe1008:我知道是这么存得,但是比如一个数int num=5663;我就不知道怎么放了啊;
    stjay:按照你的方法试了一下,确实是放进去了,但是顺序不是我想要的,我想要高位在前,低位在后,前 面补0,比如int num=5663;应该得到Data[6]={0x33,0x04,0x00,0x00,0x16,0x1F};按照你的方法得到的是{0x33,0x04,0x1F,0x16,0x00,0x00}。gz_qmc:你的方法得到的也是{0x33,0x04,0x1F,0x16,0x00,0x00}。VisualEleven:能用这几个函数把这个数放好么/我试了一下不会用……我自己想了两个方法,char数组留4位存16进制,也就是说最大为0Xffffffff,分别用除法和移位;
    除法:
            Data[2]=number/(0xFFFFFF+1);
    Data[3]=(number%(0xFFFFFF+1))/(0xFFFF+1);
    Data[4]=(number%(0xFFFF+1))/(0xFF+1);
    Data[5]=number%256;
    移位:
             int temp;
    Data[2]=number>>24; temp=number<<8;
    Data[3]=temp>>24; temp=number<<16;
    Data[4]=temp>>24;        temp=number<<24;
    Data[5]=temp>>24;
    比较麻烦,但是实现了,不知道还有没有比较好的方法,谢谢各位,很受启发
      

  6.   

    交换一下高低位就可以了嘛
    char Data[6]={0x33,0x04,0x00,0x00,0x00,0x00};
    int *x=(int*)(&Data[2]);*x=123456;
    Data[5]^=Data[2];
    Data[2]^=Data[2];
    Data[5]^=Data[2];
    Data[3]^=Data[4];
    Data[4]^=Data[3];
    Data[3]^=Data[4];
      

  7.   

    *x=123456;
    Data[5]^=Data[2];
    Data[2]^=Data[5];
    Data[5]^=Data[2];
    Data[3]^=Data[4];
    Data[4]^=Data[3];
    Data[3]^=Data[4];
      

  8.   

    int  n=2550;
    char a=char(n);
    char b=char(n>>8);
    大概就是这个意思
      

  9.   

    移位也是可以的Data[2]=(number>>24)&0xFF;
    Data[3]=(number>>16)&0xFF;
    Data[4]=(number>>8)&0xFF
    Data[5]=number&0xFF;如果测试反了
    就把2,3,4,5顺序反过来
      

  10.   

    ULONGLONG llData(somevalue);Data[5] = llData & 0xff;
    Data[4] = llData>>16 & 0xff;
    Data[3] = llData>>32 & 0xff;
    Data[2] = llData>>48 & 0xff;