我正在尝试将十六进制字符串转换为C ++中的unsigned int。我的代码如下所示:
string hex("FFFF0000");
UINT decimalValue;
sscanf(hex.c_str(), "%x", &decimalValue);
printf("\nstring=%s, decimalValue=%d",hex.c_str(),decimalValue);
结果是-65536。我通常不会做太多的C ++编程,所以任何帮助都会受到赞赏。
感谢, 杰夫
答案 0 :(得分:21)
您可以使用istringstream
和hex
操纵器执行此操作:
#include <sstream>
#include <iomanip>
std::istringstream converter("FFFF0000");
unsigned int value;
converter >> std::hex >> value;
您还可以使用std::oct
操纵器来解析八进制值。
我认为你得到负值的原因是你正在使用%d
格式说明符,它用于有符号值。将%u
用于无符号值应该可以解决此问题。但更好的方法是使用流库,它在编译时就可以解决这个问题:
std::cout << value << std::endl; // Knows 'value' is unsigned.
答案 1 :(得分:6)
使用%u
而不是%d
答案 2 :(得分:4)
好吧,-65536是0xFFFF0000。如果您将使用
printf("\nstring=%s, decimalValue=%u",hex.c_str(),decimalValue);
它将打印出您期望的内容。
答案 3 :(得分:3)
%d
将UINT的位解释为signed。你需要:
printf("\nstring=%s, decimalValue=%u",hex.c_str(),decimalValue);
答案 4 :(得分:3)
答案是对的,如果解释为signed(0x d printf格式化程序),则0xffff0000为-65536。您希望将十六进制数字解释为无符号(%u或%x)。