将十六进制字符串转换为 C 中的有符号整数
许多情况需要将十六进制字符串转换为 C 中的有符号整数。例如,您可能有一个像“fffefffe”这样的十六进制字符串,表示二进制值 11111111111111101111111111111110,对应于有符号整数 -65538。
使用 std::stringstream 的解决方案
一种实现方法此转换涉及使用 std::stringstream:
unsigned int x; std::stringstream ss; ss << std::hex << "fffefffe"; ss >> x;
非负数
要处理非负数,您可以使用以下示例:
#include <sstream> #include <iostream> int main() { unsigned int x; std::stringstream ss; ss << std::hex << "0000000A"; ss >> x; std::cout << static_cast<int>(x) << std::endl; }
这将产生 10 作为结果,这对于十六进制字符串是正确的"0000000A".
C 11 字符串转数字函数
在 C 11 中,您可以使用字符串转数字函数,例如 std::stoul:
std::string s = "0xfffefffe"; unsigned int x = std::stoul(s, nullptr, 16);
其他方法
或者,您可以利用 Boost 等库,它提供 lexical_cast 等功能:
unsigned int x = boost::lexical_cast<int>("0x0badc0de");
滚动您自己的 lexical_cast
如果您更喜欢没有依赖关系的更简单的方法,您可以使用自定义实现lexical_cast:
template<typename T2, typename T1> inline T2 lexical_cast(const T1 &in) { T2 out; std::stringstream ss; ss << in; ss >> out; return out; } unsigned int x = lexical_cast<unsigned int>("0xdeadbeef");
以上是如何在 C 中将十六进制字符串转换为有符号整数?的详细内容。更多信息请关注PHP中文网其他相关文章!