● 関数リファレンス
文字列を 64 bit 型整数に変換
INT64 __stdcall floatex_strtoi64(const char *pstr,char **ppstop,int radix,int *pboverflow);
UINT64 __stdcall floatex_strtoui64(const char *pstr,char **ppstop,int radix,int *pboverflow)
引数
引数名 | 意味 |
pstr | 変換対象の文字列を格納した char型配列の先頭アドレス |
ppstop | 走査停止時のポインタを格納するポインタの先頭アドレス(NULL指定可) |
radix | 基数 |
pboverflow | オーバーフローフラグを受け取る int型変数の先頭アドレス(NULL指定可) |
戻り値
変換結果を返します。
説明
floatex_strtoi64 は文字列で表現された整数値を INT64型に変換します。floatex_strtoui64 は UINT64型に変換します。これらの関数は、FPU を使用しません。
変換する文字列のフォーマット.
[空白] [+ または -] [0 または 0x または 0X または 0b または 0B] [数値]
↑ ↑
符号 基数指定文字列
先頭側の空白は無視されます。数値は一文字以上の英数字で構成された文字列です。
このフォーマットに従っていない文字列の場合は、走査を途中で停止します。
radix と基数指定文字列
- radix が 0 の場合
基数指定文字列で基数を判断します。"0" の場合は 8 進数、"0x" または "0X" の場合は 16進数、"0b" または "0B" の場合は 2進数と認識されます。基数指定文字列に何も置かなかった場合は 10進数となります。
- radix が 16 の場合
基数は 16進数となります。基数指定文字列は、何も指定しないか、"0x" または "0X" である必要があります。
- radix が 2 の場合
基数は 2進数となります。基数指定文字列は、何も指定しないか、"0b" または "0B" である必要があります。
- その他の数値の場合
指定した基数で変換を行います。基数指定文字列は何も置かない必要があります。
数値の範囲と表現
- floatex_strtoi64 で変換される範囲は -9223372036854775808 〜 9223372036854775807 となります。floatex_strtoui64 は 0 〜 18446744073709551615 となります。
- 数値部分の変換中は 2 の補数で処理されません。floatex_strtoi64 では "0xFFFFFFFFFFFFFFFF" を指定しても -1 ではなく 18446744073709551615 と認識されてしまうので、オーバーフローになります。-1 に変換したい場合は "-1" としてください。
- floatex_strtoui64 に負符号付きの文字列を渡すと、変換した数値部分を 、更に 2 の補数に変換します。例えば、"-1" を指定した場合、結果は 0xFFFFFFFFFFFFFFFF になります(符号付き 10 進数で -1 )。
- floatex_strtoi64 はオーバーフローすると、正の場合は 9223372036854775807 を返し、負の場合は -9223372036854775808 を返します。
floatex_strtoui64 は、オーバーフローすると 18446744073709551615 を返します。
変換中にオーバーフローしても、文字列の終端か変換不可能な文字が出現するまで、走査は続けられます。
- 数値の中に変換できない文字が入っていた場合、戻り値には変換できなかった文字までの数値が変換されて返されます。
ppstop
ppstop にポインタのアドレスを指定すると、走査を停止した位置をそのポインタに返します。走査停止位置の情報が不要な場合は、ppstop に NULL を指定する事ができます。
停止位置の文字を調べれば、変換の停止理由を調べる事ができます。
例.
INT64 v;
char *pstr,*pstop;
pstr = "123456789";
v = floatex_strtoi64(pstr,&pstop,0,NULL);
この場合、変換は成功するので、pstop が指す位置は末尾のヌル文字です。
pstr = "12345@6789";
v = floatex_strtoi64(pstr,&pstop,0,NULL);
この場合は数値の中に変換できない文字 '@' が入っているので、pstop は '@' の位置を指します。
pboverflow
pboverflow に int型変数のアドレスを指定すると、正常終了した時は 0 、オーバーフローした時には 1 をセットします。