アプリ版:「スタンプのみでお礼する」機能のリリースについて

Visual C++ 2008で作成したWindow Form アプリケーションから,シリアルポートを介して,外部機器を操作しようとしています。

動作としてはフォーム上のテキストボックスに入力された文字を送る,というものです。

外部機器にデータを送る際,データの先頭に ENQ(ASCIIで0x05) を付加して送る必要があります。

0x05を送ったら,外部機器は30,78,30,35が送られてきたものと認識しているようです。

c++からASCIIで0x05を送りたい場合,どのようにプログラムを作成すればよろしいでしょうか?
strings型の文字をASCII文字に変換する関数などはあるのでしょうか?

A 回答 (3件)

No1.さんの回答のほかに、文字列中に書くならば、


8進のエスケープシーケンスで"\005"と書けばよいでしょう。
(コンパイラによっては16進で "\x05" という表記も可能な場合があります。)

これで sprintf(toSend, "\005%s", data); のように書けます。

# たぶん sprintf(toSend, "0x05%s", data); のように書いていて困ったのだと
# 勝手に想像しながら回答しています。
    • good
    • 0
この回答へのお礼

ありがとうございます。
お教えいただいた方法でデータを送信することができました。
また,なにかありましたら,宜しくお願い致します。

お礼日時:2011/12/19 19:49

通信のdllを作っている関係で配列を使ってしまいますが、単に変数にしたら出来るのかな。


BYTE head_data;
head_data=0x05; // ENQ
serialPort->write(head_data)
    • good
    • 0
この回答へのお礼

ありがとうございます。
No2の方の方法でできましたので,今回はクローズさせていただきます。

お礼日時:2011/12/19 19:50

例えば


BYTE head_data[1];
head_data[0]=0x05; // ENQ
として、このhead_dataを1バイト送信してから目的の文字列を送れば良いと思います。

あるいは必要な配列を取っておいて、先頭に0X05を入れ、二バイト目からテキストボックスの文字列を入れて、配列の先頭から送信するとかですね。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
シリアルポートからデータを送るために
  serialPort->write(head_data[0])
と,書いたらビルドエラーになってしまいました。

配列ですので変数と同じようには扱えないのでしょうか?

C++について無知過ぎてわかりませんので,なにとぞご教授お願い致します。

お礼日時:2011/12/19 19:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!