正确转换十六进制数十进制数(也为负数)

时间:2016-12-06 13:07:56

标签: c++ hex decimal negative-number

正如标题所假设我试图将十六进制数字(如0x320000dd)转换为十进制数字。 我的代码仅适用于正数,但在代表负十进制数的十六进制数字时失败。以下是我的代码的摘录:

         cin>>hex>> x;
         unsigned int number = x;
         int r = number & 0xffffff; 

我的输入以十六进制表示,计算机会自动将其转换为整数。我想要做的是获取十六进制数的操作数,所以最后24位。 你能帮助我让我的代码适用于负值,如:0x32fffdc9或0x32ffffff吗?非常感谢!

编辑:

我希望我的输出为: 0x32fffdc9 - > -567 要么 0x32ffffff - > -1

所以只是普通的十进制值,但它给了我16776649和16777215作为上面的例子。

1 个答案:

答案 0 :(得分:1)

负整数通常存储在2's complement中意味着如果未设置最高有效位(MSB),则数字不为负数。这意味着正如您需要取消设置数字的8-MSB以将32位数字钳位到24位正数,因此您需要设置 8-您的号码的MSB将被限制为负数:

const int32_t r = 0x800000 & number ? 0xFF000000 | number : number & 0xFFFFFF;

vector<bool>bitset可能值得您考虑,因为它们会将十六进制数字澄清到要设置的位范围。

相关问题