[英]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::dec
和std::hex
您可以告诉ostream对象如何从int表示形式创建字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.