2016-05-19 24 views
-1

シリアルポート(COMポートをエミュレートするUSB​​)を介してデータをマイクロコントローラに送信するWindowsプログラムを作成しようとしています。シリアルポートにバイトを送信

これまではASCII文字列で作っていましたが、クラスメイトと仕事をしなければならないと言われました。私は彼が使用する必要がある実際のバイト(私はWindowsインターフェイスをプログラミングしているマイクロコントローラをプログラミングしている)をシリアルポートに送信する必要があること。

私はいつもの形で、ASCII文字列でWriteFile()を使用:

WriteFile(handlePort, bufferPort, strlen(buffer_puerto), &nBytes, NULL); 

を私は10000001 10010001 0000000 10100001 11101101のように、バイトのチェーンを送信する必要があります。

が3番目のバイト00000000を検出すると、ヌル文字'\0'のように解釈され、それ以上のバイトを送信しないという問題があります。

どうかお手伝いできますか?何らかの情報を失うことなく、すべてのバイトを(第3の00000000の後に)送信する方法はありますか?

WriteFile()以外の機能がありますか?私はどうすればいいのですか?

+0

問題は、ヌルバイトで停止する 'strlen'を呼び出すことです。 –

答えて

3

それはそれはあなたが望む0で停止していますSTRLENそれはだ、WriteFile関数ではありません。

... 
int len = 5; 
char bytes[] = {0x81, 0x91, 0x0, 0xa1, 0xed}; 
WriteFile(handlePort,bytes,len,&nBytes,NULL); 
if (len != nBytes) { 
    error("Not all bytes written!"); 
} 
... 
+0

はい、' char [] '(または' BYTE [] ')を使用する必要があります。 –

+0

よくある – patstew

1

問題は、あなたがゼロバイトで停止するように設計されてstrlenを使用しています。 WriteFileは問題ありません。書き込むバイト数を正しいバイト数だけ伝える必要があります。

関連する問題