gpt4 book ai didi

c++ - 如何将 std::stringstream 转换为 uintptr_t 并保持十六进制值?

转载 作者:行者123 更新时间:2023-11-28 01:27:16 26 4
gpt4 key购买 nike

目前,我正在尝试从指针地址计算偏移量,并且要计算的偏移量数量可能会发生变化,因此该方法必须动态完成。

我首先循环计算我要计算的偏移量,每个偏移量相隔 4 个字节,因此我将当前迭代乘以 4,然后尝试将结果值转换为十六进制地址,并将其存储返回 uintptr_t 作为十六进制值。

这个值,理论上应该就是我要找的offset。

实际上,情况并非如此,该值似乎被转换回整数并存储在 uintptr_t 变量中。

预期输出:

4
8
C
10
14
(etc)

实际输出

4
8
12
16
20
(etc)

代码

for (int i = 1; i < totalEntities + 1; i++)
{
// Define a stringstream to store the hex value.
std::stringstream ss;

// Define a value that will be converted to hex.
uintptr_t valueToHex = i * 4;

// Convert valueToHex to Hex, and store the result in stringstream ss.
ss << std::hex << valueToHex;

// Convert stringstream ss to a uintptr_t stored in valueToHex
ss >> valueToHex;

// Output result
std::cout << valueToHex << std::endl;
}

最佳答案

uintptr_t 表示一个整数值。它不代表该值的文本表示。数字的基数不是值的一部分。 0xC12014 是无法区分的值,无论它们的表示形式如何。

基础是文本表示的一部分。当从字符流中提取整数时,除值之外的所有信息(即所有表示细节)都会丢失。

您可以:

a) 而是提取一个字符串,并将提取的字符串插入到输出流中。字符串保留大部分文本表示(一个异常(exception)是系统特定的换行字符序列被转换为 \n)或

b) 使用 std::hex 以您想要的表示形式将整数插入到输出流中。

关于c++ - 如何将 std::stringstream 转换为 uintptr_t 并保持十六进制值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53200486/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com