鱼C论坛

 找回密码
 立即注册
查看: 880|回复: 3

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

[复制链接]
发表于 2023-10-17 21:13:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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;

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
}

现在,你应该能够正确地将指针的地址转换为十进制表示,并且输出正确的结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;}
希望能帮到你!

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-3 21:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表