- ベストアンサー
シリアル通信で0x00を送信したいのですが。
こんにちは、VC++初心者です。 現在、下記サイトのプログラムをもとにシリアル通信用プログラムを作成しています。 http://www.takebay.net/~daigo-ao/paddlewiki.pl/title_A5B7A5EAA5A2A5EBC4CCBFAE2852532D3233324329A4C7C1F7BFAEA1A6BCF5BFAEA4F2B9D4A4A6A5D7A5EDA5B0A5E9A5E0.html 例えば、editboxに02 31 32 33 03と入力したら、0x02 0x31 0x32 0x33 0x03として送信するところまではできました。 ただし、00と入力したとき、0x00として送信することができません。 どうすれば0x00を送信できるか、ご教授お願いいたします。 m_editSend.GetWindowText()にて入手したstrSendのデータから、SPACEを除いて、 0xをつけてhexにしてから、Send()にて送信しています。 void CSerial2Dlg::OnBnClickedButtonSend() { CString strSend; CString strSendCMD; CString bw; int i, n, i2; unsigned int hex; m_editSend.GetWindowText(strSend); // ポート名を取得 char *buff = new char[strSend.GetLength()+1]; if(strSend.GetLength() == 0 || strSend == " "){ //送るものが無ければ終了 AfxMessageBox("送信するコマンドがありません。"); } else{ strcpy(buff, strSend); //editboxのデータをbuff[]へコピー i = 0; n = 0; bw = "\0"; while (buff[i] != '\n'){ if( buff[i] == ' ' || buff[i] == ':' || buff[i] == ',')//SPEACEorコロンorカンマをSKIPして送信する。 else{ bw += buff[i];//2文字ためる n++; } if(n == 2){ sscanf(bw, "%x", &hex); //bwに2文字溜まったら、hexに変換 strSendCMD += hex; bw = "\0"; //変換が終わったらClear n = 0; //カウントもリセット } i++; } m_serial->Send(strSendCMD, strlen(strSendCMD)); } delete [] buff ; //bufferの開放 } 下記のプログラムで、 WriteFileにて送信しています。 void CSerialCommunication::Send(LPCSTR str, DWORD strLength) { if (m_hComm == NULL) { AfxMessageBox("COMポートが開かれていません"); return; } // ** 送信! ** DWORD dwWrite; // COMポートに送ったバイト数 WriteFile(m_hComm, str, strLength, &dwWrite, NULL); }
- みんなの回答 (4)
- 専門家の回答
お礼
ご丁寧にまとめていただきましてありがとうございます。 理解が深まりました。 あとは参考書を読みながらがんばってみます。