• ベストアンサー

文字列の中から必要なデータを抜き出す

VC++6.0 です。 計測機器から受信したデータ(文字列)の中から、必要なデータだけを抜き出したいのですが、 うまく抜き出すことが出来ません。アドバイスいただけませんでしょうか? 受信する文字列は 伝送制御キャラクタSTX(0x02) "文字列" 伝送制御キャラクタETX(0x03) のように受信します。 抜き出すための目印?がキーボードで入力できるような文字列の場合は過去ログにありました以下のコードで 抜き出すことが可能でした。 抜き出すための目印を 0x02 や 0x03 にする為にはどうしたら良いでしょうか?   //文字列版 #include <stdio.h> #include <string.h> #include <stdlib.h> char *cut(const char *str, const char *ss, const char *es, char *buff){ /* str の ss の次から es の前までの文字列をbuff に切り出す */ char *wk, *s, *e, *c; wk=strdup(str); if(wk==NULL)return NULL; s=strstr(wk, ss); if(s==NULL){ free(wk); return NULL;} c=s+strlen(ss); e=strstr(c, es); if(e==NULL){ free(wk); return NULL; } *e='\0'; strcpy(buff, c); free(wk); return buff; } int main(void){ const char url[]="?http://www.sample.ne.jp/";? char buff[32]; printf("//~/:%s\n", cut(url , "//", "/", buff)); return 0; }

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

  • ベストアンサー
回答No.2

こちらのVC++6.0で同じソースで試しましたが、0x02、0x03でも抽出可能でした。 cut関数はそのまま、変更点は以下です。 int main(void){   const   char  url[]="\x02www.sample.ne.jp\x03";   char  buff[32];   printf("0x02~0x03:%s\n", cut(url , "\x02", "\x03", buff));   return 0; }

hagimoto
質問者

お礼

dennou2000さんありがとうございました!! 0x02 ではダメだったんですね。 私もdennou2000さんの方法で成功しました。

その他の回答 (1)

  • GOGOV
  • ベストアンサー率54% (12/22)
回答No.1

受信データを1byteづつmemcmpを使用し0x02,0x03と比較する。 0x02から0x03の間のデータを別のバッファにでもいれればそれが必要なデータ

hagimoto
質問者

お礼

GOGOVさんありがとうございました。 今回は#2さんの方法で上手く行きましたが、 今後、勉強のためmemcmpを使った方法でも試してみたいと思います。

関連するQ&A