1

シリアルポートと通信する小さなプログラムを書いています。これらの行のいずれかでプログラムが正常に動作するようになりました。

unsigned char send_bytes[] = { 0x0B, 0x11, 0x00, 0x02, 0x00, 0x69, 0x85, 0xA6, 0x0e, 0x01, 0x02, 0x3, 0xf };

ただし、送信する文字列は可変であるため、次のようなものを作成したいと思います。

char *blahstring;
blahstring = "0x0B, 0x11, 0x00, 0x02, 0x00, 0x69, 0x85, 0xA6, 0x0e, 0x01, 0x02, 0x3, 0xf"
unsigned char send_bytes[] = { blahstring };

エラーは発生しませんが、機能しません..何かアイデアはありますか?

4

2 に答える 2

7

バイト文字列は次のようなものです。

char *blahString = "\x0B\x11\x00\x02\x00\x69\x85\xA6\x0E\x01\x02\x03\x0f"

また、これは通常の文字列ではないことに注意してください。特定のサイズの文字の配列として明示的に指定すると賢明です。

そのようです:

unsigned char blahString[13] = {"\x0B\x11\x00\x02\x00\x69\x85\xA6\x0E\x01\x02\x03\x0f"};
unsigned char sendBytes[13];
memcpy(sendBytes, blahString, 13); // and you've successfully copied 13 bytes from blahString to sendBytes

あなたが定義した方法ではありません..

編集:なぜあなたの最初send_bytesが機能し、2 番目が機能しないのかを答えるには: 最初のものは、個々のバイトの配列を作成します。2 番目の as は、ASCII 文字の文字列を作成します。したがって、最初の長さsend_bytesは 13 バイトsend_bytesですが、バイトのシーケンスは 2 番目の個々の文字に相当する ASCII であるため、2 番目の長さははるかに長くなりますblahstring

于 2013-02-01T05:26:52.750 に答える