定义一个数组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
char Data[6]={51,4,0,0,0,0};
int aa=300;*(int*)&Data[2]=aa; //ntohl(aa)
//memcpy(&Data[2], &aa, sizeof(aa));
---------------
那可以使用LOWORD(),HIWORD(), LOBYTE(), HIBYTE();存入数组中
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;
比较麻烦,但是实现了,不知道还有没有比较好的方法,谢谢各位,很受启发
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];
Data[5]^=Data[2];
Data[2]^=Data[5];
Data[5]^=Data[2];
Data[3]^=Data[4];
Data[4]^=Data[3];
Data[3]^=Data[4];
char a=char(n);
char b=char(n>>8);
大概就是这个意思
Data[3]=(number>>16)&0xFF;
Data[4]=(number>>8)&0xFF
Data[5]=number&0xFF;如果测试反了
就把2,3,4,5顺序反过来
Data[4] = llData>>16 & 0xff;
Data[3] = llData>>32 & 0xff;
Data[2] = llData>>48 & 0xff;