C++十六进制字符串转无符号整数
可能的重复:
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您可以使用
istringstream
和hex
操纵器来执行此操作:您还可以使用
std::oct
操纵器来解析八进制值。我认为您获得负值的原因是您使用的是
%d
格式说明符,该说明符用于有符号值。对无符号值使用%u
应该可以解决这个问题。不过,更好的是使用streams库,它在编译时解决这个问题:You can do this using an
istringstream
and thehex
manipulator: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:使用 int 输出
%u
而不是%d
output with int with
%u
instead of%d
那么,-65536 就是 0xFFFF0000。如果您使用
它,它将打印您期望的内容。
Well, -65536 is 0xFFFF0000. If you'll use
it will print what you expect.
答案是正确的,如果解释为有符号(%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).
%d
将 UINT 的位解释为带符号的。您需要:%d
interprets the bits of the UINT as signed. You need: