先貼上代碼,發送端如下:
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位數的數字
求大佬幫忙看看是啥問題啊
uj5u.com熱心網友回復:
str222.Format("%d",MidBuf);%s 吧 ?
uj5u.com熱心網友回復:
可能是發送端和接收端的編譯模式不一樣? 一邊是UNICODE 一邊是多位元組?改為統一的格式,或者轉為UTF8試試看
uj5u.com熱心網友回復:
換成%s之后顯示一個成了一個小方塊。。。。而且兩邊都是多位元組uj5u.com熱心網友回復:
注意發送和接收的資料長度!uj5u.com熱心網友回復:
把資料長度全部改為1024之后還是顯示方框uj5u.com熱心網友回復:
先把中文轉成byte陣列,再發送。比如utf8編碼,收到后再解碼等uj5u.com熱心網友回復:
我發的時候改啦memcpy(cSendBuf+4,str1.GetBuffer(str1.GetLength()),str1.GetLength()); //將cstring放入byte陣列
uj5u.com熱心網友回復:
“177=0xB1,224=0xE0,194=0xC2,235=0xEB”=“編碼”(多位元組)uj5u.com熱心網友回復:
大小端問題 ?uj5u.com熱心網友回復:
具體要怎么解決啊?到midbuf里的內容都是對的,但是轉成字串就出問題了uj5u.com熱心網友回復:
而且收到的buf中資料的位置和內容都是完全一樣的uj5u.com熱心網友回復:
str222.Format("%s",MidBuf);AfxMessageBox(str222);
uj5u.com熱心網友回復:
訊息框顯示也是個方框uj5u.com熱心網友回復:
1 先傳純ASC碼看 是否正常?2 選擇的字體是否支持中文?
3 控制面板,區域語言選項中看非Unicode程式語言是否是中文?
uj5u.com熱心網友回復:
memcpy(MidBuf,cBuf,128);//cBuf 里是什么 ?
uj5u.com熱心網友回復:
剛檢查過全部都是中文cbuf里就是那倆字呀
uj5u.com熱心網友回復:
那不就是CString str222;
str222=(char*)MidBuf;
怎么 str222 會不對 ?
uj5u.com熱心網友回復:
str222.Format("%d",MidBuf); 改成%s就可以顯示出來。你那個顯示方塊是因為你發送的字串前面兩個
cSendBuf[0]=13;
cSendBuf[1]=0x05;
uj5u.com熱心網友回復:
memcpy(cSendBuf+4,str1.GetBuffer(str1.GetLength()),str1.GetLength()); 這里加4了,實際發送了8位元組過去uj5u.com熱心網友回復:
改成s也不行。。。+4只不過改變了資料的位置。uj5u.com熱心網友回復:
memcpy(MidBuf,cBuf,128); 這里復制的時候, 你跳過前面的4個位元組了嗎?uj5u.com熱心網友回復:
樓上的大神們,居然可以看懂你的代碼,真的是服氣uj5u.com熱心網友回復:
memcpy(MidBuf,cBuf,128); 這里復制的時候, 你跳過前面的4個位元組了嗎?樓上問的對
uj5u.com熱心網友回復:
特供顯示緩沖區中的每個位元組函式輔助除錯: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);
}
}
uj5u.com熱心網友回復:
str222.Format("%d",MidBuf); ??你想干嘛?將MidBuf當做一個int型別來解釋?uj5u.com熱心網友回復:
發送方和接收方編碼方式一致即可。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/55909.html
標籤:基礎類
