王鹿其 发表于 2023-10-17 21:13:32

强制将十六进制转化为十进制,总是报错

#include<iostream>
using namespace std;
int main()
{
        int a = 10;
        int * p;
        p = &a;


        cout << "a的地址的十进制表示为" << (int)p << endl;
      cout << "a的地址的十进制表示为" << (long long int)p << endl;
       
        *p = 1000;//修改内存
        cout << a << endl;
        cout << *p << endl;
       
        return 0;

}

isdkz 发表于 2023-10-17 21:13:59

问题出在你在输出a的地址时的强制类型转换上。在C++中,指针类型和整数类型之间的强制类型转换是不允许的,因为它们是完全不同的类型。

如果你想要将指针的地址转换为十进制表示,你可以使用 reinterpret_cast 来实现。下面是修改后的代码:

#include<iostream>
using namespace std;
int main()
{
    int a = 10;
    int * p;
    p = &a;

    cout << "a的地址的十进制表示为" << reinterpret_cast<long long int>(p) << endl;

    *p = 1000; // 修改内存
    cout << a << endl;
    cout << *p << endl;

    return 0;
}


现在,你应该能够正确地将指针的地址转换为十进制表示,并且输出正确的结果。

Mike_python小 发表于 2023-10-17 21:14:22

在输出a的地址时,你使用了一个括号包裹p的类型转换语句,但是其中包含了一个全角括号,这可能会导致编译器解析出错。建议修改为半角括号。

此外,在将十六进制转换为十进制时,你可以使用C++标准库中的stoi函数,它可以将字符串类型的数字直接转换为整型。具体用法可以参考下面的示例代码:

++
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string hex_str = "1A";
    int dec_num = stoi(hex_str, nullptr, 16);
    cout << "十六进制数 " << hex_str << " 转换为十进制为 " << dec_num << endl;
    return 0;
}


希望能帮到你!

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

陶远航 发表于 2023-10-17 21:14:39

你的代码中的错误是在尝试将指针转换为整数时。在C++中,你不能直接将指针转换为int或long long int。你需要使用reinterpret_cast来进行这种转换。以下是修改后的代码:

#include<iostream>
using namespace std;
int main()
{
      int a = 10;
      int * p;
      p = &a;

      cout << \"a的地址的十进制表示为\" << reinterpret_cast<intptr_t>(p) << endl;
      cout << \"a的地址的十进制表示为\" << reinterpret_cast<intptr_t>(p) << endl;
      
      *p = 1000;//修改内存
      cout << a << endl;
      cout << *p << endl;
      
      return 0;

}


这里,我使用了reinterpret_cast<intptr_t>(p)来将指针转换为整数。intptr_t是一个整数类型,它的大小足以保存任何指针的完整信息。这样,你就可以将指针安全地转换为整数,然后再转换回指针,而不会丢失信息。

注意:这种转换是非标准的,可能会导致不可预见的结果,特别是在跨平台的代码中。因此,除非你确实需要这样做,并且明白这样做的后果,否则最好避免这样的转换。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
页: [1]
查看完整版本: 强制将十六进制转化为十进制,总是报错