dポイントプレゼントキャンペーン実施中!

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;
}

A 回答 (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;
}
    • good
    • 0
この回答へのお礼

dennou2000さんありがとうございました!!

0x02 ではダメだったんですね。
私もdennou2000さんの方法で成功しました。

お礼日時:2006/10/12 17:51

受信データを1byteづつmemcmpを使用し0x02,0x03と比較する。


0x02から0x03の間のデータを別のバッファにでもいれればそれが必要なデータ
    • good
    • 0
この回答へのお礼

GOGOVさんありがとうございました。

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

お礼日時:2006/10/12 17:53

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