要在unicode下,請教各位神仙。。
uj5u.com熱心網友回復:
怎么發就怎么收,一般網路傳輸用utf-8編碼,國際通用uj5u.com熱心網友回復:
怎么使用utf-8編碼呢,剛學不太會uj5u.com熱心網友回復:
接收部分char szTemp[200];
int n=Receive(szTemp,200);
szTemp[n]=0;
CString sTemp;
sTemp.Format(_T("%s"),szTemp);
uj5u.com熱心網友回復:
發送部分UpdateData();
m_ClientSocket.Send(m_sWords,m_sWords.GetLength()); //發訊息
m_ListWords.AddString(_T("發送:")+m_sWords);
uj5u.com熱心網友回復:
電腦記憶體或檔案內容或傳輸內容只是一個一維二進制位元組陣列及其對應的二進制地址;人腦才將電腦記憶體或檔案內容或傳輸內容中的這個一維二進制位元組陣列及其對應的二進制地址的某些部分看成是整數、有符號數/無符號數、浮點數、復數、英文字母、阿拉伯數字、中文/韓文/法文……字符/字串、匯編指令、函式、函式引數、堆、堆疊、陣列、指標、陣列指標、指標陣列、陣列的陣列、指標的指標、二維陣列、字符點陣、字符筆畫的坐標、黑白二值圖片、灰度圖片、彩色圖片、錄音、視頻、指紋資訊、身份證資訊……
對電腦而言沒有亂碼,只有二進制位元組;對人腦才有亂碼。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A
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熱心網友回復:
接收和發送改下====》》》接收部分
char szTemp[200];
int n=Receive(szTemp,200);
szTemp[n]=0;
CStringA szBuf(szTemp);
CString sTemp(szBuf);
發送部分
UpdateData();
CStringA szSendBuf(m_sWords);
m_ClientSocket.Send(szSendBuf,szSendBuf.GetLength()); //發訊息
m_ListWords.AddString(_T("發送:")+m_sWords);
uj5u.com熱心網友回復:
那發送部分也使用char*唄,兩端只要保證字符集型別一致就可以了uj5u.com熱心網友回復:
同時用 WCHAR 或CHAR用 TCHAR 的話, 發送長度 * sizeof(TCHAR)
uj5u.com熱心網友回復:
對電腦而言沒有亂碼,只有二進制位元組;對人腦才有亂碼。 趙老師這話言之有理。
uj5u.com熱心網友回復:
對電腦而言沒有亂碼,只有二進制位元組;對人腦才有亂碼。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8Auj5u.com熱心網友回復:
用char陣列接收,然后char[]轉成cstringuj5u.com熱心網友回復:
如果客戶端和服務端都是自己寫的,都用一樣的編碼格式就行了。如果服務端活客戶端是比爾呢寫的,就用UTF-8.
轉換方法如下:
wchar_t * UTF8ToUnicode( const char* str )
{
int textlen = 0;
wchar_t * result;
textlen = MultiByteToWideChar( CP_UTF8, 0, str,-1, NULL,0 );
result = (wchar_t *)malloc((textlen+1)*sizeof(wchar_t));
memset(result,0,(textlen+1)*sizeof(wchar_t));
MultiByteToWideChar(CP_UTF8, 0,str,-1,(LPWSTR)result,textlen );
return result;
}
char * UnicodeToANSI( const wchar_t *str )
{
char * result;
int textlen = 0;
// wide char to multi char
textlen = WideCharToMultiByte( CP_ACP, 0, str, -1, NULL, 0, NULL, NULL );
result =(char *)malloc((textlen+1)*sizeof(char));
memset( result, 0, sizeof(char) * ( textlen + 1 ) );
WideCharToMultiByte( CP_ACP, 0, str, -1, result, textlen, NULL, NULL );
return result;
}
char * UnicodeToUTF8( const wchar_t *str )
{
char * result;
int textlen = 0;
// wide char to multi char
textlen = WideCharToMultiByte( CP_UTF8, 0, str, -1, NULL, 0, NULL, NULL );
result =(char *)malloc((textlen+1)*sizeof(char));
memset( result, 0, sizeof(char) * ( textlen + 1 ) );
WideCharToMultiByte( CP_UTF8, 0, str, -1, result, textlen, NULL, NULL );
return result;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/99755.html
標籤:基礎類
