tcp协议下SOCKET发送SEND十六进制数组问题

perfectgao7 2014-12-29 03:31:00
BYTE datatest[8]={0x41,0x41,0x41,0x42,0x42,0x41,0x41,0x42};
send(ClientSock[0], (LPCSTR)datatest, 8, 0);

客户端接收以字符串形式显示得到AAABBAAB,这应该是正确的

如果:
BYTE datatest[8]={0x41,0x01,0x41,0x42,0x42,0x41,0x41,0x42};
send(ClientSock[0], (LPCSTR)datatest, 8, 0);

只是将0x41改成0x01,0x01在ascii码中表示控制字符。
客户端以字符串形式接收显示如下:


我最终的目标是将16进制的数组发送到客户端,客户端是移动小车。可能是我这种形式不对。求指教!
...全文
2540 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
csdn_howe 2017-08-24
  • 打赏
  • 举报
回复
楼主怎么解决的??现在C++服务端要求我传过去一个存放了十六进制数的byte数组,{ 0x68, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x68, 0x20, 0x09, 0x34, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e },我用移动端只能发送二进制收,把这个byte数组转成二进制,然后服务端那边接收到就变成了E5 BF 83 E8 B7 B3 E6 A3 80 E6 B5 8B E5 AD 97 E7 AC A6 E4 B8 B2 E5 91 BD E4 BB A4,服务端只想直接接收到{ 0x68, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x68, 0x20, 0x09, 0x34, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e },这个该怎么实现呢?
oyljerry 2014-12-29
  • 打赏
  • 举报
回复
十六进制也是通过byte array方式发送,接受后,再转换会十六进制
perfectgao7 2014-12-29
  • 打赏
  • 举报
回复
@coding_hello我查了接收端的内存是对的!感谢这位的帮助。已解决了
一桶姜山 2014-12-29
  • 打赏
  • 举报
回复
没看出问题,楼主要发送数组,而且确实收到了,你的目的不是达到了吗
赵4老师 2014-12-29
  • 打赏
  • 举报
回复
void HexDump(char *buf,int len,int addr) {
    int i,j,k;
    char binstr[80];

    for (i=0;i<len;i++) {
        if (0==(i%16)) {
            sprintf(binstr,"%08x -",i+addr);
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        } else if (15==(i%16)) {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
            sprintf(binstr,"%s  ",binstr);
            for (j=i-15;j<=i;j++) {
                sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
            }
            printf("%s\n",binstr);
        } else {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        }
    }
    if (0!=(i%16)) {
        k=16-(i%16);
        for (j=0;j<k;j++) {
            sprintf(binstr,"%s   ",binstr);
        }
        sprintf(binstr,"%s  ",binstr);
        k=16-k;
        for (j=i-k;j<i;j++) {
            sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
        }
        printf("%s\n",binstr);
    }
}
不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://bbs.csdn.net/topics/380167545

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧