我们在C++中显示变量地址均为十六进制的,不具有直观性,尤其在分析连续存储的变量内存地址时。下面分享一个可将十六进制地址转为十进制地址显示的代码,需要注意的是,需要在文件头包含sstream与string。
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int ip2decimal(void* ip)
{
stringstream str;
string ip_str;
str<<ip;
str>>ip_str;
int bit=0;
int ans=0;
for(int i=ip_str.size();i>=0;--i)
{
if(ip_str[i]>='0'&&ip_str[i]<='9')
{
ans+=(ip_str[i]-'0')*pow(16,bit++);
}else if(ip_str[i]>='A'&&ip_str[i]<='F')
{
ans+=(ip_str[i]-'A'+10)*pow(16,bit++);
}
}
return ans;
}
演示:
int main()
{
int a=100;
cout<<"a的十六进制地址:"<<&a<<endl;
cout<<"a的十进制地址:"<<ip2decimal(&a)<<"\n"<<endl;
double b=12.5;
cout<<"b的十六进制地址:"<<&b<<endl;
cout<<"b的十进制地址:"<<ip2decimal(&b)<<"\n"<<endl;
string str="xiaoming";
cout<<"str的十六进制地址:"<<&str<<endl;
cout<<"str的十进制地址:"<<ip2decimal(&str)<<"\n"<<endl;
int matrix[3]={1,2,3};
cout<<"matrix[0]的十六进制地址:"<<&matrix[0]<<endl;
cout<<"matrix[0]的十进制地址:"<<ip2decimal(&matrix[0])<<endl;
cout<<"matrix[1]的十六进制地址:"<<&matrix[1]<<endl;
cout<<"matrix[1]的十进制地址:"<<ip2decimal(&matrix[1])<<endl;
cout<<"matrix[2]的十六进制地址:"<<&matrix[2]<<endl;
cout<<"matrix[2]的十进制地址:"<<ip2decimal(&matrix[2])<<endl;
system("pause");
return 0;
}
结果: