C++ 如何将std::stringstream转换为uintpttr\t并保持十六进制值?
目前,我正在尝试从指针地址计算偏移量,并且要计算的偏移量的数量可能会发生变化,因此该方法必须动态完成 我首先循环尝试计算的偏移量,每个偏移量相隔4个字节,因此我将当前迭代乘以4,然后尝试将结果值转换为十六进制地址,并将其作为十六进制值存储回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
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;i std::coutuintpttr\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;i std::cout似乎您只想将整数输出为十六进制字符串
for (int i = 1; i < numEntities + 1; i++)
{
std::cout << std::hex<< i*4 << std::endl;
}
for(int i=1;i std::cout No,输出只是为了调试。我试图以uintpttr\u t
的形式获取此值,因为它是一个偏移量,然后我会将其添加到指针地址(因此它必须保留数据类型)。那么,您实际要做的是什么,您显示的代码除了整数的cout之外没有任何输入和输出。“预期输出”显示您想要一个整数列表显示在hexNo中,输出只是为了调试。我试图将此值作为uintpttr\u t
获取,因为它是一个偏移量,然后我将其添加到poin中ter地址(因此它必须保留数据类型)。那么,您实际要做的是什么,您显示的代码除了整数的cout之外没有任何输入和输出。“预期输出”显示您想要一个整数列表显示在hex中(a)的问题是将其放入std::string
意味着我将无法将其添加到指针地址,即使转换也是如此std::string
到auintpttr\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
是相同的值,用相同的字节表示,在算术运算等方面表现相同。你们把存储和表示混淆了。我明白你们在说什么了。对不起引起混乱的是,我认为