c ++将整数转换为8个字符的十六进制,删除前两个字符,使其仅为6个字符的十六进制,然后转换回整数

c++ convert integer to 8 char hex, drop the first two char so that it is only a 6 char hex, and convert back to an integer

我已经搜索和试验了很多很多个小时,但到目前为止,我还无法调整我遇到的任何解决方案来做我想做的事情。

我的目标是获取一个整数 (538214658) 并将其转换为 8 个字符的十六进制字符串 (020148102)。然后我想删除前两个字符 (0148102) 并将其转换回我用作地图数组中的键的整数 (1343746)。

到目前为止我看到的解决方案只是将整数转换为十六进制字符串,但没有考虑所需的数字长度。

我可以使用以下代码打印出前 6 个字符:

Console_Print("%06X", form ? form->refID : 0)

所以我想也许我可以使用该技术将其存储到字符串中,然后使用 iostream 或 sstream 将其转换回整数,但是 none 我的搜索找到了我能找到的任何东西采用。我所有的实验都失败了。

不胜感激。

编辑:以下是我根据 Klaus 的建议提出的解决方案:

uint32_t GetCoreRefID(TESForm* form)
{
    uint32_t iCoreRefID = 0;
    if (form)
    {
        uint32_t iRefID = (uint32_t)(form->refID);
        iCoreRefID = iRefID & 0x00ffffff;
    }
    return iCoreRefID;
}

无需转换为字符串表示形式。

看下面的例子:

int main()
{
    uint32_t val = 538214658 & 0x00ffffff;
    std::cout << std::hex << val << std::endl;
    std::cout << std::dec << val << std::endl;

}

您必须了解值仍然只是一个值,并不依赖于十进制或十六进制等表示形式。存储在内存区域或寄存器中的值仍然相同。

正如您在给定示例中看到的那样,我编写了您的十进制值表示形式,并通过使用掩码的十六进制表示形式执行 bitwise and 操作简单地删除了前两个十六进制数字。

此外,您必须了解在两个不同的 "modes" 中使用 cout 打印根本没有改变值,也没有改变内部表示。使用 std::decstd::hex 告诉 ostream 对象如何从 int 表示创建字符串。