怎么用sock中send发送十六进制数据
char buff[256];
sprintf(buff,"%X%X",0x10050038,0xF4EE2A00);
send(clisock, buff,strlen(buff), 0);
我想让客户端收到的数据是0x10050038,0xF4EE2A00 (8字节)
而不是转成字符串的10050038F4EE2A00(16字节)
我该怎么才能把十六进制的数据发送到客户端?
问题点数:0、回复次数:11Top
1 楼zhuhuidong(牛人小)回复于 2004-09-02 08:15:20 得分 0
把数据当作字符串,前面加上0x头再发送就行了。
char buff[256];
sprintf(buff,"0x%X0x%X",0x10050038,0xF4EE2A00);
send(clisock, buff,strlen(buff), 0);Top
2 楼yuantao(cfan)回复于 2004-09-02 08:41:38 得分 0
发出去的是2进制啊,不分10位,16位啊
你接收的时候在自己写个函数,把他转成16进制不就可以了吗,跟转成10进制道理不是一样的吗
Top
3 楼sharkhuang(走吧走吧!人总会慢慢长大~)回复于 2004-09-02 09:23:49 得分 0
肯定要网络字节续转换哦Top
4 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2004-09-02 09:43:51 得分 0
你接收到字符串后,在转换成十六进制就可以了Top
5 楼jzyhummel(篱影)回复于 2004-09-02 12:05:11 得分 0
所有数据在发送和接收的时候都是char型的,都需要强制转换的,就像你发结构一样,收到的都是char型,还不是要你强制转换到结构中去一样Top
6 楼gdy119(夜风微凉)回复于 2004-09-02 12:35:56 得分 0
UP!Top
7 楼LongLongAgoImBoy(ThereIsAMe)回复于 2004-09-02 12:42:55 得分 0
相同系统平台之间发送:
long lNumber = 0x77889900;
char *pStrNum = new char[sizeof(long)];
memcpy(pStrNum, &lNumber, sizeof(long));
send(pStrNum, sizeof(long));
delete []pStrNum;
...
char *pBuf = new char[sizeof(long)];
recv(pBuf, sizeof(long));
long lRecvNum = 0;
memcpy(&lRecvNum, pBuf, sizeof(long));
delete []pBuf;
...
不同平台直接,没有做过,我想可不可以转换成字符串
char buffer[11];
long lNumber = 0x77889900;
sprintf(buffer, "0x%08X", lNumber);
send(buffer, sizeof(buffer));
...
receive(buffer, sizeof(buffer));
long lRecvNum = 0;
sscanf(buffer,"%x",&lRecvNum);
...
Top
8 楼LongLongAgoImBoy(ThereIsAMe)回复于 2004-09-02 12:59:44 得分 0
更正:
char buffer[9];
long lNumber = 0x77889900;
sprintf(buffer, "%08X", lNumber);
send(buffer, sizeof(buffer));
...
receive(buffer, sizeof(buffer));
long lRecvNum = 0;
sscanf(buffer,"%x",&lRecvNum);
...
Top
9 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2004-09-02 13:02:14 得分 0
sprintf(buff,"%X%X",0x10050038,0xF4EE2A00);
=>
sprintf(buff,"0x%X0x%X",0x10050038,0xF4EE2A00);Top
10 楼sunux(网络飘客)回复于 2004-09-02 13:13:31 得分 0
无论如何发的都是一段buffer,发什么不行。。。。。Top
11 楼xxedge(好钢用在刀刃上)回复于 2004-09-02 14:58:48 得分 0
int hexbuff[2]
hexbuff[0]=0x10050038;
hexbuff[1]=0xF4EE2A00;
send(clisock, hexbuff,sizeof(hexbuff), 0);
如果发送,接受都是windows或都是Unix平台,不用考虑字节顺序问题,
收到的8个字节,假如放在data中
int hexdata[2];
memcpy((char *)hexdata,data,sizeof(hexdata));
就可以看到十六进制了
Top




