2013-06-02 276 views
0

通过使用std :: hex和std :: dec,可以从字符串中解析出十六进制数并将其转换为C++中的十进制数。但是,如果十六进制数字被签名呢?在C++中将十六进制十六进制字符标记为十进制

例如下面的代码将生成241,如果输入“F1”为十六进制无符号,则结果为正确,但如果输入为带符号的十六进制,则结果应为-15。有没有可以处理带符号十六进制值的C++函数?

​​
+0

查找['标准:: strtol'(HTTP://en.cppreference。 com/w/cpp/string/byte/strtol)和['std :: stoi'](http://en.cppreference.com/w/cpp/string/basic_string/stol)。 –

回答

1

当你说“签署十六进制”你的意思是,如果你是代表十六进制char的按位表示,则F1-15。然而,-15中的十六进制符号只是-F

如果你想从这个按位表示获得-15你就必须做一些这样的:

std::string szTest = "F1"; 
unsigned char chTest = std::stoi(szTest, nullptr, 16); 

char chTest2 = *reinterpret_cast<char*>(&chTest); 

std::cout << szTest << ": " << static_cast<int>(chTest2) << std::endl; 

return 0;