繁体   English   中英

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将其转换回整数,但是我的搜索都找不到我可以使用的任何东西。 而且我所有的实验都失败了。

一些帮助将不胜感激。

编辑:以下是基于克劳斯的建议的解决方案:

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删除了前两个十六进制数字。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM