套接字编程BYTE与汉字转换时乱码的问题

weixin_40747990 2019-01-03 11:37:18
先贴上代码,发送端如下:
CString str1="编码";
BYTE cSendBuf[1024];
memset(cSendBuf,0,sizeof(cSendBuf));
cSendBuf[0]=13;
cSendBuf[1]=0x05;
memcpy(cSendBuf+4,str1.GetBuffer(str1.GetLength()),str1.GetLength()); //将cstring放入byte数组

我要发的字是“编码”,在最后一行设置断点,发现两个字对应的4位分别是 “177?,224?,194?,235?”而且接收端也收到了同样的字符,接收端代码如下
BYTE MidBuf[1024];
memset(MidBuf,0,sizeof(MidBuf));

memcpy(MidBuf,cBuf,128);//
CString str222;
str222.Format("%d",MidBuf);
m_strAuxActivaInfo[0]=str222;
midbuf转换为str222的时候就变成了一串9位数的数字
求大佬帮忙看看是啥问题啊
...全文
1296 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2019-01-25
  • 打赏
  • 举报
回复
发送方和接收方编码方式一致即可。
worldy 2019-01-25
  • 打赏
  • 举报
回复
str222.Format("%d",MidBuf); ??你想干嘛?将MidBuf当做一个int类型来解释?
赵4老师 2019-01-24
  • 打赏
  • 举报
回复
特供显示缓冲区中的每个字节函数辅助调试:
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);
}
}
woshi_hujunjun 2019-01-19
  • 打赏
  • 举报
回复
memcpy(MidBuf,cBuf,128); 这里复制的时候, 你跳过前面的4个字节了吗?
楼上问的对
woshi_hujunjun 2019-01-19
  • 打赏
  • 举报
回复
楼上的大神们,居然可以看懂你的代码,真的是服气
xiaohuh421 2019-01-09
  • 打赏
  • 举报
回复
memcpy(MidBuf,cBuf,128); 这里复制的时候, 你跳过前面的4个字节了吗?
weixin_40747990 2019-01-05
  • 打赏
  • 举报
回复
改成s也不行。。。+4只不过改变了数据的位置。
schlafenhamster 2019-01-04
  • 打赏
  • 举报
回复
那不就是
CString str222;
str222=(char*)MidBuf;
怎么 str222 会不对 ?
weixin_40747990 2019-01-04
  • 打赏
  • 举报
回复
刚检查过全部都是中文
cbuf里就是那俩字呀
qq_40138079 2019-01-04
  • 打赏
  • 举报
回复
memcpy(cSendBuf+4,str1.GetBuffer(str1.GetLength()),str1.GetLength()); 这里加4了,实际发送了8字节过去
qq_40138079 2019-01-04
  • 打赏
  • 举报
回复
str222.Format("%d",MidBuf); 改成%s就可以显示出来。

你那个显示方块是因为你发送的字符串前面两个
cSendBuf[0]=13;
cSendBuf[1]=0x05;
schlafenhamster 2019-01-03
  • 打赏
  • 举报
回复
memcpy(MidBuf,cBuf,128);//
cBuf 里是什么 ?
zgl7903 2019-01-03
  • 打赏
  • 举报
回复
1 先传纯ASC码看 是否正常?
2 选择的字体是否支持中文?
3 控制面板,区域语言选项中看非Unicode程序语言是否是中文?

weixin_40747990 2019-01-03
  • 打赏
  • 举报
回复
消息框显示也是个方框
schlafenhamster 2019-01-03
  • 打赏
  • 举报
回复
str222.Format("%s",MidBuf);
AfxMessageBox(str222);
weixin_40747990 2019-01-03
  • 打赏
  • 举报
回复
而且收到的buf中数据的位置和内容都是完全一样的
weixin_40747990 2019-01-03
  • 打赏
  • 举报
回复
具体要怎么解决啊?到midbuf里的内容都是对的,但是转成字符串就出问题了
schlafenhamster 2019-01-03
  • 打赏
  • 举报
回复
大小端问题 ?
schlafenhamster 2019-01-03
  • 打赏
  • 举报
回复
“177=0xB1,224=0xE0,194=0xC2,235=0xEB”=“编码”(多字节)
weixin_40747990 2019-01-03
  • 打赏
  • 举报
回复
我发的时候改啦
memcpy(cSendBuf+4,str1.GetBuffer(str1.GetLength()),str1.GetLength()); //将cstring放入byte数组
加载更多回复(6)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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