string
16 進数を表す8 文字があり、それをint
. この変換では、文字列"80000000"
以上のビット パターンを保持する必要があります。つまり、これらの数値は負になるはずです。残念ながら、素朴な解決策:
int hex_str_to_int(const string hexStr)
{
stringstream strm;
strm << hex << hexStr;
unsigned int val = 0;
strm >> val;
return static_cast<int>(val);
}
私のコンパイラでは動作しませんval > MAX_INT
(戻り値が 0 の場合)。val のタイプを に変更してint
も、大きい数値は 0 になります。SO に関するさまざまな回答からいくつかの異なるソリューションを試しましたが、まだ成功していません。
私が知っていることは次のとおりです。
- OpenVMS で HP の C++ コンパイラを使用しています (Itanium プロセッサを使用していると思います)。
sizeof(int)
私のコードが実行されるすべてのアーキテクチャで少なくとも 4 になります。- 数値 > INT_MAX から int へのキャストは実装定義です。私のマシンでは、通常は 0 になりますが、興味深いことに、値が大きすぎる場合にfrom
long
をキャストするとint
結果が返されます。INT_MAX
これを正しく行うのは驚くほど難しいか、少なくとも私にとってはそうでした。これに対するポータブルなソリューションを知っている人はいますか?
アップデート:
に変更static_cast
するreinterpret_cast
と、コンパイラ エラーが発生します。上記のコードでC スタイルのキャストを試すように促されたコメントreturn (int)val
で、うまくいきました。 このマシンで。 それは他のアーキテクチャでも安全ですか?