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::dec
和 std::hex
告诉 ostream 对象如何从 int 表示创建字符串。
我已经搜索和试验了很多很多个小时,但到目前为止,我还无法调整我遇到的任何解决方案来做我想做的事情。
我的目标是获取一个整数 (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::dec
和 std::hex
告诉 ostream 对象如何从 int 表示创建字符串。