1

Windows と Linux で実行する必要があるプログラムで内部的に UTF-16 を使用することにしたので、ユーザー モード コードのネイティブ char 表現との間で変換したくないため、一部の文字列処理関数を置き換える必要があります。ただし、iconv の実行に比べて float 変換が遅い場合は、 WINEが行ったstrtod/sprintf のラッパーを使用できます 。

4

1 に答える 1

3

これらの 10 進数との変換を高速かつ正確に行うことは困難です。ナイーブな (しかし正しい) バージョンは多倍長整数を前提としています。要するに、既存のstdtod/をラップsprintfし、オーバーヘッドを心配する必要はありません。これらの関数の単純な実装を使用した場合のパフォーマンスの損失よりも少なくなります。

「ナイーブで正しくない」カテゴリには、ホストに欠けている場合にすべてのインタープリターが使用するstrtod() の実装が浮かんでいます。この実装はひどいものです (いくつかのULPによって結果が返される可能性があります) が、気にしなければ、このコードを適応させて UTF-16 文字を操作することができます。


注: swprintf()C99 には があると思いますが、これは の文字列用でありwchar_t、UTF-16 である必要はないため、うまくいかない場合があります。

于 2013-07-23T14:34:44.327 に答える