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

时间:2016-04-13 08:44:12

标签: c++ string integer hex data-conversion

我现在一直在寻找和试验很多很多小时,到目前为止,我还没有能够适应我遇到的任何解决方案来做我想做的事。

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

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

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

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

所以我认为也许我可以使用该技术将其存储到字符串中,然后使用iostream或sstream将其转换回整数,但我的搜索都没有出现我可以使用的任何内容。我的所有实验都失败了。

非常感谢一些帮助。

编辑:以下是基于Klaus'的解决方案。建议:

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

1 个答案:

答案 0 :(得分:6)

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

查看以下示例:

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

}

您必须知道值仍然只是一个值,并且不依赖于十进制或十六进制等表示。存储在存储区或寄存器中的值仍然相同。

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

此外,你必须明白,在两种不同的“模式”中使用cout打印根本不会改变值,也不会改变内部表示。使用std::decstd::hex,您可以告诉ostream对象如何从int表示创建字符串。