2012年8月11日土曜日

自作strtok関数

GPSのデータのデコードにstrtokを使ったら楽なんじゃないかな
とか思って 自分で作ってみました

本来のstrtokは
char *strtok(char *s1, const char *s2);
ですが
今回はそんなに高性能じゃなくてもいいので
uint8_t *StrtokB(uint8_t *s1, const char s2);
として
複数の文字を指定する機能は付けていません

以下コード

uint8_t *StrtokB(uint8_t *s1, const uint8_t s2) {
    static uint8_t *p = 0;
    static uint8_t *retP;

    if (s1 != 0) { p = s1; }
    if (p == 0) { return(0); }
   
    retP = p;

    if (*retP == '\0') { p = 0; return(0); }
    while(*retP == s2) { retP++; }

    p = retP + 1;
    while(*p != s2) {
        if (*p == '\0') { break; }
        p++;
    }
    if (*p != '\0') { *p++ = '\0'; }

    return(retP);
}



こんなかんじです
要らない部分とか色々突っ込みどころはアリそうだけど
とりあえず使えるか確認したかっただけなのでコレで良しとします

使い方は本来のstrtokとほぼ同じです

{
    char s1[] = "test.strtok.Hello.Wrold!...abc.123";
    char *tok;

    tok = StrtokB(s1, '.');
    while(tok != 0) {
        printf("\"%s\"\n", tok);
        tok = StrtokB(0, '.');
    }
}

という感じで使えます

検索文字の複数化をしたい場合はstrchr使えば楽だと思います
必要に駆られたら実装するかも



さーて GPSのデコード処理書くかぁ(しろめ

0 件のコメント:

コメントを投稿