インテルの数値文字列変換ライブラリー libistrconv は、ASCII 文字列と C データ型間の変換を効率良く行うように最適化されたルーチンの集まりです。
istrconv.h ヘッダーファイルには、ライブラリー関数の宣言が含まれています。
Linux* プラットフォームでは、libistrconv ライブラリーをスタティックまたは共有ライブラリーとしてリンクできます。Windows* プラットフォームでは、libistrconv をスタティック・ライブラリーとしてリンクする必要があります。
libistrconv ライブラリーを使用するには、プログラムに、ヘッダーファイル istrconv.h をインクルードしてください。
次の conv.c ファイルの例について考えてみます。このファイルは、libistrconv ライブラリーを使用して文字列と浮動小数点型の変換を行います。
// conv.c
#include <stdio.h>
#include <istrconv.h>
#define LENGTH 20
int main() {
const char pi[] = "3.14159265358979323";
char s[LENGTH];
int prec;
float fx;
double dx;
printf("PI: %s\n", pi);
printf("single-precision\n");
fx = __IML_string_to_float(pi, NULL);
prec = 6;
__IML_float_to_string(s, LENGTH, prec, fx);
printf("prec: %2d, val: %s\n", prec, s);
printf("double-precision\n");
dx = __IML_string_to_double(pi, NULL);
prec = 15;
__IML_double_to_string(s, LENGTH, prec, dx);
printf("prec: %2d, val: %s\n", prec, s);
return 0;
}
Linux* では、次のコマンドを使用して conv.c ファイルをコンパイルします。
C++:
icx
DPC++:dpcpp conv.c –libistrconv
Windows* では、次のコマンドを使用して conv.c ファイルをコンパイルします。
C++:
icx
DPC++:dpcpp conv.c libistrconv.lib
このプログラムをコンパイルして実行すると、次の結果が得られます。
PI: 3.14159265358979323
single-precision
prec: 6, val: 3.14159
double-precision
prec: 15, val: 3.14159265358979
次の整数変換関数は、インテル® SSE4.2 の文字列処理命令を使用してパフォーマンスが最適化されています。
__IML_int_to_string
__IML_uint_to_string
__IML_int64_to_string
__IML_uint64_to_string
__IML_i_to_str
__IML_u_to_str
__IML_ll_to_str
__IML_ull_to_str
__IML_string_to_int
__IML_string_to_uint
__IML_string_to_int64
__IML_string_to_uint64
__IML_str_to_i
__IML_str_to_u
__IML_str_to_ll
__IML_str_to_ull
これらの関数のインテル® SSE4.2 で最適化されたバージョンは、次の状況で使用できます。
これらの関数の汎用バージョンは、次の状況で使用できます。
これらの関数のインテル® SSE4.2 で最適化されたバージョンは、メモリーと XMM レジスター間で文字列を直接移動して、最大限のパフォーマンスをもたらします。これらの関数は、メモリー境界を越えて書き込むことはありませんが、文字列の直後のメモリー位置が未割り当てまたはアクセス不可の場合、メモリーアクセス違反が発生する可能性があります。メモリーアクセス違反の可能性に対する懸念がある場合は、代わりに汎用バージョンを使用すべきです。