• ベストアンサー

16進数の表示ができません。

シリアルポートで受信したバイナリデータを表示させると、 正しい値が出ないのですが、どうしてでしょうか? 受信するデータは16進数で 06 02 81 07 00 bb 01 b4 00 32 なのですが、以下のソースで実行すると、 6 2 ffffff80 7 0 ffffffbb 1 ffffffb4 0 32 と表示されました。 また、「データ受信完了」というメッセージが出ないのですが、 出なくてもデータ受信は出来ているのでしょうか? char szBuf[256]; char rdBuf[10]; char* prdBuf; DWORD dwCount; DWORD dwRead; dwCount = 10; prdBuf = &rdBuf[0]; if(ReadFile(hCom,prdBuf,dwCount,&dwRead,&old) == 0){ if(ERROR_IO_PENDING == GetLastError()){ if(WaitForSingleObject(hEvent,INFINITE); == WAIT_OBJECT_0){ if(GetOverlappedResult(hCom,&old,&dwCount,TRUE)) MessageBox("データ受信完了"); } } else MessageBox("データ受信エラー","試作1",MB_ICONSTOP); } wsprintf(szBuf,"文字 = %x %x %x %x %x %x %x %x %x %x", rdBuf[0],rdBuf[1],rdBuf[2],rdBuf[3],rdBuf[4],rdBuf[5],rdBuf[6],rdBuf[7],rdBuf[8],rdBuf[9]); MessageBox(szBuf); よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

0x80以上のコードが符号拡張されたためです。 rdBufは符号なしで定義すればよいでしょう。 unsigned char rdBuf[10];

meeyooyoo
質問者

お礼

ご指摘の通り修正してうまくできました。 有難うございました。

その他の回答 (2)

  • dummyplug
  • ベストアンサー率58% (134/230)
回答No.3

あと"6"でなくて"06"と表示して欲しいなら"%x"でなくて"%02x"とするとよいと思います。 ReadFile()関数は成功すると0以外の値を返すようですから、受信成功すると終わりから3行目のwsprintf()まで飛んでくるんじゃないですか。ですから"データ受信完了"とかその辺の処理は一切通らないかと。

meeyooyoo
質問者

お礼

有難うございます。 %02xにして、欲しかった形で表示できるようになりました。

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1
meeyooyoo
質問者

お礼

ご指摘の通り修正してうまくできました。 有難うございました。

関連するQ&A

専門家に質問してみよう