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