RS232Cで数字と文字の混合を送信するにはどうすればよろしいでしょうか?
012tom02
というのを送るとして
「01」と「02」は数字で
「2tom」は文字列というのを送信したいのですが、
これをバイナリエディタで作成しテキストファイルとして保存し、
ハイパーターミナルで送信すると受信されるのですが、
作成したプログラムで行うとうまくできません。
(プログラムではファイル送信ではなく。数字と文字の送信を行いたい)
どなたかアドバイスお願いします。
下記にソースを載せます。
<--ここから-->
void Cidt3Dlg::OnBnClickedRadio1()
{
// TODO : ここにコントロール通知ハンドラ コードを追加します。
HANDLE iComm;
iComm = CreateFile(9600,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(iComm == INVALID_HANDLE_VALUE)
{
// エラー処理
}
DCB dcb;
GetCommState(iComm, &dcb); /* DCB を取得 */
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.fParity = FALSE;
dcb.StopBits = ONESTOPBIT;
SetCommState(iComm, &dcb); /* DCB を設定 */
char* pszBuf1; /* 書き込みデータバッファ */
int test,test1;
DWORD dwWritten; /* ポートへ書き込んだバイト数 */
test = 01;
pszBuf1 ="2tom";
test1 = 02;
//pszBuf = reinterpret_cast<char *>(bright); //intからcharに変換
WriteFile(iComm, &test, sizeof(int), &dwWritten, NULL);
WriteFile(iComm, pszBuf1, strlen(pszBuf1), &dwWritten, NULL);
WriteFile(iComm, &test1, sizeof(int), &dwWritten, NULL);
COMMTIMEOUTS TimeOuts;//timeout
TimeOuts.ReadIntervalTimeout = MAXWORD;
TimeOuts.ReadTotalTimeoutMultiplier = 500;
TimeOuts.ReadTotalTimeoutConstant = 10;
TimeOuts.WriteTotalTimeoutMultiplier = 500;
TimeOuts.WriteTotalTimeoutConstant = 10;
SetCommTimeouts(iComm, &TimeOuts);
CloseHandle(iComm);
}
<--ここまで-->
>「01」と「02」は数字で
↑これの意味がわかりません。
「01」というのは 0x00, 0x01 の2バイトのバイナリデータということですか?
>isshi様
失礼しました。
おっしゃるとおり「01」「02」はバイナリデータです。
>おっしゃるとおり「01」「02」はバイナリデータです。
バイナリということは分かりました。
しかし、2バイトなのかどうかということには答えてくれませんでしたね。
前回も書いたように、
「01」= 0x00, 0x01 の2バイトのバイナリ
「02」= 0x00, 0x02 の2バイトのバイナリ
なのか、
「01」= 0x01 の1バイトのバイナリ
「02」= 0x02 の1バイトのバイナリ
なのか、どちらですか?
仮に前者だったら「01」の送信は、
BYTE buf[] = {0x00, 0x01};
WriteFile(iComm, buf, 2, &dwWritten, NULL);
のようにすれば良いです。
ありがとうございました。
送信したがったのは1バイトでした。
無事に解決致しました。
ツイート | ![]() |