C ++十六进制字符串到unsigned int

时间:2011-01-26 03:17:33

标签: c++ hex int

  

可能重复:
  C++ convert hex string to signed integer

我正在尝试将十六进制字符串转换为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 ++编程,所以任何帮助都会受到赞赏。

感谢, 杰夫

5 个答案:

答案 0 :(得分:21)

您可以使用istringstreamhex操纵器执行此操作:

#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

输出int

答案 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)。