インテル® C++ コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス

概要: インテルの数値文字列変換ライブラリー

インテルの数値文字列変換ライブラリー libistrconv は、ASCII 文字列と C データ型間の変換を効率良く行うように最適化されたルーチンの集まりです。istrconv.h ヘッダーファイルには、ライブラリー関数の宣言が含まれています。

Linux* および macOS* プラットフォームでは、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 ファイルをコンパイルします。

icc conv.c -libistrconv 

macOS* では、次のコマンドを使用して conv.c ファイルをコンパイルします。

icc conv.c -libistrconv

Windows* では、次のコマンドを使用して conv.c ファイルをコンパイルします。

icl conv.c libistrconv.lib

このプログラムをコンパイルして実行すると、次の結果が得られます。

PI: 3.14159265358979323 

single-precision		
prec: 6, val: 3.14159 

double-precision		
prec: 15, val: 3.14159265358979

インテル® SSE4.2 命令を使用して最適化された整数変換関数

次の整数変換関数は、インテル® 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 レジスター間で文字列を直接移動して、最大限のパフォーマンスをもたらします。これらの関数は、メモリー境界を越えて書き込むことはありませんが、文字列の直後のメモリー位置が未割り当てまたはアクセス不可の場合、メモリーアクセス違反が発生する可能性があります。メモリーアクセス違反の可能性に対する懸念がある場合は、代わりに汎用バージョンを使用すべきです。