atof()
およびsscanf()
非常に多様な形式を受け入れる汎用メソッドです。浮動小数点値が特定のパターンに従うことがわかっている場合は、予期される形式の変換を最適化することができます。すなわち。サポートする必要はありません (+-)、Inf、Nan、または sci-notation (1.3e43) などをサポートする必要はありません。
文字列から一度に 3 文字を変換するルックアップ テーブルを作成できます。ここで、たとえば文字列 "432" の 4 つの LSB ビットを単純に連結します。インデックスの 16 進値は 0x432 になり、コンテンツは 432 になります。
キャストとは、一部のバイナリ データの解釈を変更することを意味します。double または float と integer はバイナリ互換ではありません ((+) 0 の値を除く)。ただし、次のキャストは、文字列の最初の 3 文字が数字かどうかを確認するために機能します。
char num[]="123.123";
if ((*((int*)num) & 0x00f0f0f0) == 0x00303030) // can use faster conversion
// this means interpreting the pointer to string as a pointer to integer
// and then referencing the contents of the memory _as_ integer (+ some bitmasking)
さらに、浮動小数点のセットが比較的小さい場合、または特定の値が非常に頻繁に発生する場合は、スペースを速度と引き換えにハッシュ テーブルを選択することがあります。ハッシュ テーブルに一致するものがあれば、4 バイトまたは 8 バイトの文字列を並行して比較して検証できます (または、入力が有効であることがわかっている場合は、その部分をスキップします)。最初の推測のために最初の 4 文字をハッシュし、次の 4 文字から一度に続行することで、これらの手法を組み合わせることもできます。