我有一个string
代表十六进制数字的 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。我已经从这里的各种答案中尝试了几种不同的解决方案,但还没有成功。
以下是我所知道的:
- 我在 OpenVMS 上使用 HP 的 C++ 编译器(我相信使用的是安腾处理器)。
sizeof(int)
在我的代码将运行的每个架构上至少有 4 个。- 从数字 > INT_MAX 转换为 int 是实现定义的。在我的机器上,它通常会导致 0,但有趣的是,当值太大时,转换 from
long
会int
导致结果。INT_MAX
很难正确地做到这一点,或者至少对我来说是这样。有谁知道这个的便携式解决方案?
更新:
更改static_cast
为reinterpret_cast
会导致编译器错误。一条评论提示我尝试 C 风格的转换:return (int)val
在上面的代码中,它起作用了。 在这台机器上。 这在其他架构上仍然安全吗?