1

文字列入力は次のようになります

> bc <address1> <address2> length

を使用して文字列をトークンにstrtok分割できますが、各トークンを取得する方法がわかりません。たとえば、アドレス 1 とアドレス 2 を 16 進数に変換します。

void tokenize()
{
char str[] ="bc 0xFFFF0 0xFFFFF 30";
char *tkn;
char *tkn2;

tkn = strtok (str," ");  

  while (tkn != NULL) {

    while (*tkn != 0)
    {
        putchar(*tkn);
        *tkn++;
    }
  tkn = strtok (NULL, " ");
  printf("\n"); 
  }
}

これまでのところ、トークンを出力していますが、それぞれを個別に使用する方法がわかりません。

bc
0x000FF
0x0FFF
30
4

4 に答える 4

2

strtol を使用して数値を変換します。3 番目の引数は基数で、特別な値 0 は strtol に "0x" などに基づいて推測するように指示します。

long num;
char s[] = "0xFFFF0";
char s2[] = "30";

num = strtol(s, &endptr, 0);
// if s==endptr, there was an error.
// if you really want to be complete, endptr - s should equal strlen("0xFFFF0")

num = strtol(s2, &endptr, 0);
// Same error checks.
于 2010-03-07T04:37:49.570 に答える
1

文字列の形式が で、位置にfixedある 16 進数を数値に変換したい場合は、次のようなものを試すことができます。23

    char str[] ="bc 0xFFFF0 0xFFFFF 30";
    int count = 1;
    int n1,n2;
    char *tkn= strtok (str," ");
    while (tkn != NULL) {

            if(count == 2) { // tkn now points to a string "0xFFF0", now convert to int.
                    sscanf(tkn,"%x",&n1);
            }
            if(count == 3) {
                    sscanf(tkn,"%x",&n2); break;
            }
            tkn = strtok (NULL, " ");
            count++;
    }
    printf("%x %x\n",n1,n2); // prints ffff0 fffff
于 2010-03-07T04:42:16.500 に答える
0

以下はスケッチのみです。

試す

char * addresses[ 2 ];
i = 0;

次に、while ループの中で

strncpy( addresses[ i ], *tkn, , MAX_TOKEN_LENGTH );
++i;

ループの外側では、addresses[] 配列にアクセスすることで入力を使用できます。

于 2010-03-07T04:37:33.710 に答える