シリアルポートの16進数を処理したい
Q&A
シリアルポートの16進数を処理したい
VC2019で無線機とシリアル通信をするプログラムを作っています。
無線機からは16進数でデータが送られてきてそれの処理をするのがわかりません
のでご教示願えますか
以前他の無線機ではデータがアスキーコードで送られてきたので処理することが
出来たのですが16進数ですとどう処理するのかわかりませんのでお願いします
言語 C++ MFC利用
シリアルを受信のコード
int RADIO1::Readrs232c(CString* RS_Send, CString* RS_Read)
{
CString SSD, RRD;
char In[1024];
DWORD lRead;
int itemp;
//HANDLE hPort;
int Ret = 0;
strcpy_s(In, 1024, " ");
//フフフフのゴミが出てしまうのでここでスペース代入
Ret = ReadFile( // データの受信
ComPort,
// 通信デバイスのハンドル: CreateFile()で取得したハンドルを指定
In,
// 受信バッファーのポインタを指定: 受信データがここに格納されます。
1024,
// 受信するバイト数を指定: ここで指定するバイト数を受信するか
//またはタイムアウト時間がくるまで
// ReadFile()関数は( getc()のように )待ちます
&lRead, // 実際に受信したバイト数(DWORD)が格納されるポインタを指定
NULL // 通信とは関係ない引数なのでNULLを指定
);
if (Ret == FALSE) //失敗した場合
{
printf("ReadFile failed. \n");
CloseHandle(ComPort);
exit(0);
}
//アスキーの場合は下記で処理出来てます
RRD = In;
*RS_Read = RRD;
//とりあえずintに変換してみました
int kari;
kari = int(In);
return 0;
}
他のシリアル通信モニタープログラムで無線機からの受信したデータを確認したところ
FE FE 00 94 00 60 57 01 07 00 FD
となっていて
中の意味は下記のようになってます
FEFEはコマンド先頭のコード
00は宛先アドレス
94は送信元のアドレス
00はコマンド
60 57 01 07 00
はデータで 0070015760 です
FDはコマンド末尾のコード
vc2019でブレークでkariを16進数で確認した値です
0x6ed1a660