【发布时间】:2016-08-04 05:35:48
【问题描述】:
我已经搜索和试验了很多很多小时,但到目前为止,我无法调整我遇到的任何解决方案来做我想做的事。
我的目标是取一个整数 (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;
}
【问题讨论】:
-
在您的第一个建议中,您也可以将其写成简短的:
return form?0x00ffffff & (form->refID):0。我不知道哪种类型是 form->refID,但它应该可以在没有额外转换的情况下工作。但这并不意味着像这样的?运算符:-) 你的解决方案更容易阅读,编译器会生成我相信的相同代码。
标签: c++ string integer hex data-conversion