亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

以下代碼,buf=new char[strSend.GetLength()*2+1]怎么理解?

以下代碼,buf=new char[strSend.GetLength()*2+1]怎么理解?

慕尼黑5688855 2021-11-10 11:07:32
將待發送的字符串轉換成單字節,進行發送buf=new char[strSend.GetLength()*2+1]怎么理解? 為什么長度乘二加一呢?麻煩各位高手指點//發送數據void CSerialSampleDlg::OnBnClickedBtnSend(){char * buf =NULL; //定義發送緩沖區DWORD dwBufLen = 0; //定義發送緩沖區長度CString strSend = L"";//得到發送輸入框CEdit *pEdtSendMsg = (CEdit*)GetDlgItem(IDC_EDT_SEND);ASSERT(pEdtSendMsg != NULL);//串口如果沒有打開,直接返回if (m_pSerial == NULL){AfxMessageBox(L"串口未打開");return;}//得到待發送的字符串pEdtSendMsg->GetWindowTextW(strSend);//將待發送的字符串轉換成單字節,進行發送buf = new char[strSend.GetLength()*2+1];ZeroMemory(buf,strSend.GetLength()*2+1);//轉換成單字節進行發送 WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK,strSend.GetBuffer(strSend.GetLength()),strSend.GetLength(),buf,strSend.GetLength()*2,NULL,NULL);dwBufLen = strlen(buf) + 1;//發送字符串m_pSerial->WriteSyncPort((BYTE*)buf,dwBufLen);//釋放內存delete[] buf;buf = NULL;}沒看懂為什么要將它轉換成單字節來發送,并且長度要乘以2菜鳥一只,請高手指點
查看完整描述

2 回答

?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

字符串以'\0'結束,加1應該是為了存放這個'\0'.
你的strSend是什么類型的?
你使用的字符是Unicode,屬于寬字節字符,每個寬字節占兩個byte,轉換成單字節時,所以要*2.

查看完整回答
反對 回復 2021-11-14
?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

因為string中要額外存儲一個結束符'\0'
并且類string在輸出時就是以該符號標志本string的結束位置
如果不加1就無法存儲結束符,也就不知道string在哪兒結束了,所以會導致越界的錯誤

查看完整回答
反對 回復 2021-11-14
  • 2 回答
  • 0 關注
  • 449 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號