C++十六进制字符串转无符号整数

发布于 2024-10-14 07:03:54 字数 476 浏览 2 评论 0原文

可能的重复:
C++ 将十六进制字符串转换为有符号整数

我正在尝试将C++ 中的十六进制字符串转换为无符号整数。我的代码如下所示:

string hex("FFFF0000");
UINT decimalValue;
sscanf(hex.c_str(), "%x", &decimalValue); 
printf("\nstring=%s, decimalValue=%d",hex.c_str(),decimalValue);

结果是-65536。我通常不会做太多的 C++ 编程,因此任何帮助将不胜感激。

谢谢, 杰夫

Possible Duplicate:
C++ convert hex string to signed integer

I'm trying to convert a hex string to an unsigned int in C++. My code looks like this:

string hex("FFFF0000");
UINT decimalValue;
sscanf(hex.c_str(), "%x", &decimalValue); 
printf("\nstring=%s, decimalValue=%d",hex.c_str(),decimalValue);

The result is -65536 though. I don't typically do too much C++ programming, so any help would be appreciated.

thanks,
Jeff

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

北恋 2024-10-21 07:03:54

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

#include <sstream>
#include <iomanip>

std::istringstream converter("FFFF0000");
unsigned int value;
converter >> std::hex >> value;

您还可以使用 std::oct 操纵器来解析八进制值。

我认为您获得负值的原因是您使用的是 %d 格式说明符,该说明符用于有符号值。对无符号值使用 %u 应该可以解决这个问题。不过,更好的是使用streams库,它在编译时解决这个问题:

std::cout << value << std::endl; // Knows 'value' is unsigned.

You can do this using an istringstream and the hex manipulator:

#include <sstream>
#include <iomanip>

std::istringstream converter("FFFF0000");
unsigned int value;
converter >> std::hex >> value;

You can also use the std::oct manipulator to parse octal values.

I think the reason that you're getting negative values is that you're using the %d format specifier, which is for signed values. Using %u for unsigned values should fix this. Even better, though, would be to use the streams library, which figures this out at compile-time:

std::cout << value << std::endl; // Knows 'value' is unsigned.
不气馁 2024-10-21 07:03:54

使用 int 输出 %u 而不是 %d

output with int with %u instead of %d

南街女流氓 2024-10-21 07:03:54

那么,-65536 就是 0xFFFF0000。如果您使用

printf("\nstring=%s, decimalValue=%u",hex.c_str(),decimalValue);

它,它将打印您期望的内容。

Well, -65536 is 0xFFFF0000. If you'll use

printf("\nstring=%s, decimalValue=%u",hex.c_str(),decimalValue);

it will print what you expect.

早茶月光 2024-10-21 07:03:54

答案是正确的,如果解释为有符号(%d printf 格式化程序),0xffff0000 就是 -65536。您希望将十六进制数字解释为无符号(%u 或 %x)。

The answer is right, 0xffff0000 is -65536 if interpreted as signed (the %d printf formatter). You want your hex number interpreted as unsigned (%u or %x).

征﹌骨岁月お 2024-10-21 07:03:54

%d 将 UINT 的位解释为带符号的。您需要:

printf("\nstring=%s, decimalValue=%u",hex.c_str(),decimalValue);

%d interprets the bits of the UINT as signed. You need:

printf("\nstring=%s, decimalValue=%u",hex.c_str(),decimalValue);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文