char buff[256];
sprintf(buff,"%X%X",0x10050038,0xF4EE2A00);
send(clisock, buff,strlen(buff), 0);我想让客户端收到的数据是0x10050038,0xF4EE2A00 (8字节)
而不是转成字符串的10050038F4EE2A00(16字节)我该怎么才能把十六进制的数据发送到客户端?

解决方案 »

  1.   

    把数据当作字符串,前面加上0x头再发送就行了。
    char buff[256];
    sprintf(buff,"0x%X0x%X",0x10050038,0xF4EE2A00);
    send(clisock, buff,strlen(buff), 0);
      

  2.   

    所有数据在发送和接收的时候都是char型的,都需要强制转换的,就像你发结构一样,收到的都是char型,还不是要你强制转换到结构中去一样
      

  3.   

    相同系统平台之间发送:
    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);
    ...
      

  4.   

    更正:
    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);
    ...
      

  5.   

    sprintf(buff,"%X%X",0x10050038,0xF4EE2A00);
    =>
    sprintf(buff,"0x%X0x%X",0x10050038,0xF4EE2A00);
      

  6.   

    无论如何发的都是一段buffer,发什么不行。。
      

  7.   

    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));
    就可以看到十六进制了