+----------------+
| ストラトル |
+----------------+
つまり文字列が長くなります
long int strtol(const char *nptr, char **endptr, int Base)
strtol() は、nptr が指す文字列をパラメータのbaseに従ってlong intに変換し、この値を返します。
パラメータの Base の範囲は 2 ~ 36、および 0 で、整数に変換される文字列の重みを決定します。
変換できる有効文字は基数によって異なります。たとえば、基数が 2 の場合、有効文字は「0」、「1」、基数が 8 の場合、有効文字は「0」、「1」になります。 , ... '7'; 基数が 10 の場合、有効な文字は '0'、'1'、...'9'、基数が 16 の場合、有効な文字は '0'、'1'、... '9', 'a ',...'f'; 基数が 24 の場合、有効な文字は '0',...'9', 'a',...'n'、基数が 36 の場合、有効な文字は「0」、...「9」、「a」、...「z」などです。このうち、大文字と小文字は区別されません。たとえば、「A」と「a」は両方とも 10 に変換されます。
文字が有効な場合、「0」、...「9」は順に 10 進数の 0 ~ 9 に変換され、「a」、...「z」は 10 進数の 10 ~ 35 に 1 回変換されます。
strtol() 関数が最初の不正な文字を検出すると、検出は直ちに停止され、後続のすべての文字は不正な文字として扱われます。有効な文字列は、関数の戻り値として long int に変換されます。不正な文字列、つまり最初の不正な文字からのアドレスが *endptr に割り当てられます。**endptr はダブル ポインタ、つまりポインタへのポインタです。strtol() 関数は、*endptr の値を変更すること、つまり、最初の不正な文字のアドレスを endptr に渡すことです。
ほとんどの場合、endptr は NULL に設定されます。つまり、不正な文字列は返されません。
以下にいくつかの例を示します。
-------------------------------------- ----------
charbuffer[20]="10379cend$3";
char *stop;
printf("%d\n",strtol(buffer, &stop, 2));
printf("%s\ n", stop);
出力結果:
2
379cend$3
-------------------------------------- --- -----------------
charbuffer[20]="10379cend$3";
char *stop;
printf("%d\n",strtol(buffer, &stop, 8)) ;
printf("%s\n", stop);
出力結果:
543
9cend$3
---------------------------- --- ------------------------
charbuffer[20]="10379cend$3";
char *stop;
printf("%d\n "、
printf("%s\n", stop);
出力結果:
10379
cend$3
-------------------------------- -----------------------
charbuffer[20]="10379cend$3";
char *stop;
printf("%d\n",strtol(buffer) , &stop, 16));
printf("%s\n", stop);
出力結果:
17005006
nd$3
また、baseが0で文字列が0x(または0X)で始まらない場合は10進数に変換します。Base が 0 または 16 で、文字列が 0x (または 0X) で始まる場合、x (または X) は無視され、文字列は 16 進数に変換されます。Base が 0 および 16 に等しくなく、文字列が 0x (または 0X) で始まる場合、x は不正な文字とみなされます。
例:
----------------------------------------------- - -------
charbuffer[20]="0x31da6c";
char *stop;
printf("%d\n",strtol(buffer, &stop, 0));
printf("%s\n",
-------------------------------------------------- -----
charbuffer[20]="0x31da6c";
char *stop;
printf("%d\n",strtol(buffer, &stop, 13));
printf("%s\n", stop);
出力結果:
0
0x31da6c
------------------------------------------- ----------
最後に、nptr が指す文字列の場合、文字列の先頭と末尾のスペースは無視され、文字列の途中にあるスペースは不正な文字とみなされます。
例:
----------------------------------------------- - -------
文字バッファ_1[20]="10379c";
文字バッファ_2[20]=" 10379c ";
文字バッファ_3[20]=" 10 379c ";
printf("%d\n",strtol( buffer_1 ,NULL,0));
printf("%d\n",strtol(buffer_2,NULL,0));
printf("%d\n",strtol(buffer_3,NULL,0)); 出力
結果は次のとおりです。 :
10379
10379
10
+----------------+
| ストラトル |
+----------------+
ヘッダー ファイル: #include <stdlib.h>
関数を定義します。double
strtod
(
const
char
*nptr,
char
**endptr);
函数说明:strtod()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,到出现非数字或字符串结束时('\0')才结束转换,并将结果返回。若endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr传回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分。如123.456或123e-2。返回转换后的浮点值。
#include<stdlib.h>
#include<stdio.h>
void main()
{
char *endptr;
char a[] = "12345.6789";
char b[] = "1234.567qwer";
char c[] = "-232.23e4";
printf( "a=%lf\n", strtod(a,NULL) );
printf( "b=%lf\n", strtod(b,&endptr) );
printf( "endptr=%s\n", endptr );
printf( "c=%lf\n", strtod(c,NULL) );
}
結果は次のとおりです。
a=12345.678900
b=1234.567000
endptr=qwer
c=-2322300.000000
+----------------+
| ストラツール |
+----------------+
関数を定義します: unsigned long strtoul(const char *nptr, char **endptr, int Base);
関数の説明: strtoul() は、パラメーターのベースに従って、パラメーター nptr 文字列を符号なし長整数に変換します。パラメータのベースの範囲は 2 ~ 36、または 0 です。パラメータbaseは使用される基数系を表します。基数の値が10の場合は基数10が使用され、基数の値が16の場合は基数16が使用されます。基数の値が 0 の場合、状況に応じてどの基数を使用するかを選択します。最初の文字が '0' の場合、2 番目の文字が 'x' の場合は 16 進数が使用され、それ以外の場合は 8 進数が使用されると判断されます。最初の文字が「0」でない場合、基数 10 が使用されます。strtoul() は、最初にパラメータ nptr 文字列をスキャンし、先行するスペース文字列をスキップして、数値または正負の記号が見つかるまで変換を開始し、数値以外の文字列または末尾が見つかったときに変換を終了します。文字列 ('') を取得し、結果を返します。パラメータ endptr が NULL でない場合、修飾されていない条件により終了した nptr 内の文字ポインタがendptr によって返されます。変換された長整数を返します。それ以外の場合は ERANGE を返し、エラー コードを errno に格納します。
例: 16 進数の 0xFF を 10 進数に変換し、255 を取得します。
#include<stdio.h>
#include<stdlib.h>
intmain()
{
inta;
charpNum[]="0xFF";
a=strtoul(pNum,0,0);//最后的0,表示自动识别pNum是几进制
printf("%d\n",a);
return0;
}