Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将std::stringstream转换为uintpttr\t并保持十六进制值?_C++ - Fatal编程技术网

C++ 如何将std::stringstream转换为uintpttr\t并保持十六进制值?

C++ 如何将std::stringstream转换为uintpttr\t并保持十六进制值?,c++,C++,目前,我正在尝试从指针地址计算偏移量,并且要计算的偏移量的数量可能会发生变化,因此该方法必须动态完成 我首先循环尝试计算的偏移量,每个偏移量相隔4个字节,因此我将当前迭代乘以4,然后尝试将结果值转换为十六进制地址,并将其作为十六进制值存储回uintpttr\t 理论上,这个值应该是我正在寻找的偏移量 实际上,情况并非如此,该值似乎被转换回整数并存储在uintpttr\t变量中 预期输出: 4 8 C 10 14 (etc) 实际产出 4 8 12 16 20 (etc) 代码 for (in

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

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

理论上,这个值应该是我正在寻找的偏移量

实际上,情况并非如此,该值似乎被转换回整数并存储在
uintpttr\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;
}
for(int i=1;istd::cout
uintpttr\u t
表示整数的值。它不表示该值的文本表示形式。数字的基数不是该值的一部分。
0xC
12
014
是不可区分的值,无论其表示形式如何

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

您可以:

a) 取而代之的是提取字符串,并将提取的字符串插入到输出流中。字符串保留大部分文本表示形式(例外情况是特定于系统的新行字符序列被转换为
\n
)或


b) 使用
std::hex
将整数插入到所需表示形式的输出流中。

uintpttr\u t
表示整数的值。它不表示该值的文本表示形式。数字的基数不是该值的一部分。
0xC
12
014
是不可分割的nguishable值,无论其表示形式是否不同

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

您可以:

a) 取而代之的是提取字符串,并将提取的字符串插入到输出流中。字符串保留大部分文本表示形式(例外情况是特定于系统的新行字符序列被转换为
\n
)或


b) 使用
std::hex
将整数插入到所需表示形式的输出流中。

似乎您只想将整数作为十六进制字符串输出。即

for (int i = 1; i < numEntities + 1; i++)
{
    std::cout << std::hex<< i*4   << std::endl;
}
for(int i=1;istd::cout似乎您只想将整数输出为十六进制字符串

for (int i = 1; i < numEntities + 1; i++)
{
    std::cout << std::hex<< i*4   << std::endl;
}
for(int i=1;istd::cout No,输出只是为了调试。我试图以
uintpttr\u t
的形式获取此值,因为它是一个偏移量,然后我会将其添加到指针地址(因此它必须保留数据类型)。那么,您实际要做的是什么,您显示的代码除了整数的cout之外没有任何输入和输出。“预期输出”显示您想要一个整数列表显示在hexNo中,输出只是为了调试。我试图将此值作为
uintpttr\u t
获取,因为它是一个偏移量,然后我将其添加到poin中ter地址(因此它必须保留数据类型)。那么,您实际要做的是什么,您显示的代码除了整数的cout之外没有任何输入和输出。“预期输出”显示您想要一个整数列表显示在hex中(a)的问题是将其放入
std::string
意味着我将无法将其添加到指针地址,即使转换也是如此
std::string
到a
uintpttr\u t
的值将完全不同,例如,C将变为12,并将添加到指针,这将指向一个完全不同的位置。@UnAlpha好吧,如果要将值添加到指针,那么为什么要关心文本表示?
指针+0xC
指针+12
指向完全相同的位置,因为
0xC
12
是相同的数字。@UnAlpha在内存中,
0xC
12
是相同的值,由相同的字节表示,在算术运算中的行为方式相同。你把存储和表示混淆了。我明白你们在说什么。很抱歉挑起了混乱,我原以为十六进制值在算术运算中的行为会有所不同。a)的问题是将其放入
std::string
意味着我将无法将其添加到指针地址,即使将
std::string
转换为
uintptr_t
值将完全不同,例如C将变为12并添加到指针,指针将指向一个完全不同的位置。@UnAlpha好吧,如果要将值添加到指针,那么为什么要关心文本表示形式?
指针+0xC
指针+12
p指向完全相同的位置,因为
0xC
12
是相同的数字。@UnAlpha在内存中,
0xC
12
是相同的值,用相同的字节表示,在算术运算等方面表现相同。你们把存储和表示混淆了。我明白你们在说什么了。对不起引起混乱的是,我认为