掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
シリアル通信で文字化けしないようにするには? (ID:59924)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
VC初心者ですが宜しくお願いいたします。 今、VC++.NETを使ってシリアル通信をしようとしていますが、 どうしてもうまくいきません。。 どなたかわかる方ご教授宜しくお願いいたします。 #長々とした説明になってしまいますが、できるだけ伝わるように記述したつもりです。 どうか宜しくお願いします。 ・やろうとしたいこと ハイパーターミナルを使い、PC_A→PC_Bに「A,0,CR,LF('A'と'0'と'改行')」という文字を送信する。 その際、WIN32APIを用いてプログラムを組む。 ・やろうとしたこと、現象は次のとおりです。 1.PCを2台用意し、RS232Cのクロスケーブルでつなぎました。(2台ともwindowsXPです。) 2.ハイパーターミナルの設定は、両方とも同じです。 ビット/秒 「9600」 データビット 「8」 パリティ 「なし」 ストップビット「2」 フロー制御 「なし」 3.PC_Aから送信しようとしたのは「A,0,CR,LF」ですが、PC_Bで受信した文字は「チー濠」となり 文字化けを起こしてしまいます。 ・推測... 送信文字と受信文字を変換すると次のようになります。 [送信] [受信] 「A,0,CR,LF」 「チ,ー,濠」 ↓16進数 ↓shift-JIS 「0x0041,0x0030,0x000D,0x000A」 「0x00C1,0x00B0,0x8D8A」 ↓2進数 ↓2進数 「0100 0001, 「1100 0001, 0011 0000, 1011 0000, 0000 1101, 0000 1010」 1000 1101 1000 1010」 両者の2進数表記を比べると、送信文字に1000加えたものを受信しているのではないかと考えました。 つまり、下のプログラムでいうとsend()内のWriteFileで無条件に変換されてるのではないかと。。 #見当外れかもしれませんが。。 以上が私のほうで考えてみた結果です。 何かいい案はないでしょうか。。m(__)m プログラムの記述は次のとおりです。 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ main(){ (略) comset(); send(); (略) } void comset(){ hComm = CreateFile("COM1", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); //COM通信パラメータを格納しているDCB構造体を設定する。 DCB lpDCB; GetCommState(hComm, &lpDCB); lpDCB.DCBlength = sizeof(DCB); lpDCB.BaudRate = 9600; lpDCB.Parity = NOPARITY; lpDCB.StopBits = TWOSTOPBITS; lpDCB.fParity = FALSE; SetCommState(hComm, &lpDCB); //読み書きできない時のタイムアウト設定 COMMTIMEOUTS timeout; GetCommTimeouts(hComm, &timeout); timeout.WriteTotalTimeoutConstant=100; timeout.ReadTotalTimeoutConstant=100; SetCommTimeouts(hComm, &timeout); } void send(){ DWORD point; unsigned char Txbuf[] = {0x41,0x30,0x0D,0x0A};//「A,0,CR,LF」を16進数であらわした WriteFile( hComm, Txbuf, sizeof(Txbuf), &point, NULL ); } ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.