中易网

C++ string2进制转16进制要怎么做

答案:2  悬赏:70  
解决时间 2021-03-21 16:02
一个string类,只有0和1,要转成16进制要怎么做?不要0x,只要0~F就行了
最佳答案
#include 

using namespace std;

class Number {
private :
int num;
public :
Number(int n = 0) { num = n; }
Number(char xnum[],const int base); // 将base进制的数字串转换为int
int GetDec()const;
char *GetBin(char bin[]) const;
char *GetOctal(char oct[]) const;
char *GetHex(char hex[]) const;
char *GetX(char X[],int base); // 将num转换为base进制的串到X[]中
};

int Number::GetDec() const { return num; }

Number::Number(char xnum[],const int base) {
int i = 0,sign = 1,n = 0;
if(xnum[0] == '-') {
sign = -1;
++i;
}
while(xnum[i]) {
if(base > 10 && base <= 36) {
if(xnum[i] >= 'A' && xnum[i] <= 'Z')
n = base * n + xnum[i] - 'A' + 10;
else if(xnum[i] >= 'a' && xnum[i] <= 'z')
n = base * n + xnum[i] - 'a' + 10;
else n = base * n + xnum[i] - '0';
}
else if(base > 1 && base <= 10) {
n = base * n + xnum[i] - '0';
}
else {
cout << "数基超限,转换失败!\n";
num = 0;
return;
}
++i;
}
num = sign * n;
}

char *Number::GetBin(char bin[]) const {
int i,len = 0,t,sign = 0,n = num;
if(n < 0) {
sign = 1;
n = -n;
}
while(n) {
bin[len++] = n % 2 + '0';
n >>= 1;
}
if(sign) bin[len++] = '-';
bin[len] = '\0';
for(i = 0; i < len/2; ++i) {
t = bin[i];
bin[i] = bin[len - 1 - i];
bin[len - 1 - i] = t;
}
return bin;
}

char *Number::GetOctal(char oct[]) const {
int i,len = 0,t,sign = 0,n = num;
if(n < 0) {
sign = 1;
n = -n;
}
while(n) {
oct[len++] = n % 8 + '0';
n >>= 3;
}
if(sign) oct[len++] = '-';
oct[len] = '\0';
for(i = 0; i < len/2; ++i) {
t = oct[i];
oct[i] = oct[len - 1 - i];
oct[len - 1 - i] = t;
}
return oct;
}

char *Number::GetHex(char hex[]) const {
int i,len = 0,sign = 0,t,n = num;
if(n < 0) {
sign = 1;
n = -n;
}
while(n) {
t = n % 16;
if(t > 9) hex[len] = t - 10 + 'A';
else hex[len] = t + '0';
++len;
n >>= 4;
}
if(sign) hex[len++] = '-';
hex[len] = '\0';
for(i = 0; i < len/2; ++i) {
t = hex[i];
hex[i] = hex[len - 1 - i];
hex[len - 1 - i] = t;
}
return hex;
}

char *Number::GetX(char X[],int base) { // 将num转换为base进制数的串到X[]中
int i,t,sign = 0,n = num,len = 0;
if(base < 2 || base > 36) {
cout << "数基超限,转换失败!\n";
X[0] = '\0';
return X;
}
if(n < 0) {
sign = 1;
n = -n;
}
while(n) {
t = n % base;
if(t > 9) X[len] = t - 10 + 'A';
else X[len] = t + '0';
n /= base;
++len;
}
if(sign) X[len++] = '-';
X[len] = '\0';
for(i = 0; i < len/2; ++i) {
t = X[i];
X[i] = X[len - 1 - i];
X[len - 1 - i] = t;
}
return X;
}

int main() {
Number N(-256),M("36",10);
char s[33];
cout << "十 进 制:" << N.GetDec() << endl;
cout << "二 进 制:" << N.GetBin(s) << endl;
cout << "八 进 制:" << N.GetOctal(s) << endl;
cout << "十六进制:" << N.GetHex(s) << endl;
cout << "十六进制:" << N.GetX(s,16) << endl << endl;
cout << "十 进 制:" << M.GetDec() << endl;
cout << "二 进 制:" << M.GetBin(s) << endl;
cout << "八 进 制:" << M.GetOctal(s) << endl;
cout << "十六进制:" << M.GetHex(s) << endl;
cout << "十六进制:" << M.GetX(s,16) << endl << endl;
return 0;
}
全部回答
//--------------------------------------------------------------------------- #include #include using namespace std; int main(void) { string a="abc"; string b=".txt"; a+=b; cout<
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯