C++ string2进制转16进制要怎么做
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ string2进制转16进制要怎么做相关的知识,希望对你有一定的参考价值。
一个string类,只有0和1,要转成16进制要怎么做?不要0x,只要0~F就行了
#include <iostream>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;
参考技术A 先调用atoi()将string转换成整型,然后写个10进制转16进制函数追问
我原来的字符串里就是2进制的,全是0和1,不能转成10进制
c++ 将十六进制数组转换成汉字的办法
我有一个十六进制的数组str
char str[]="D6D0B9FAC8CB0D0A";//内容是“中国人”三个字。
char chinese[10]=0;
通过什么办法能够将str数组中的十六进制数据转换成汉字,并且存到数组chinese中,谢谢
我在网上找不到办法了,跪求
#include <conio.h>
#include <string.h>
#define N 100
int main()
int i,j,n,len;
char st[]="D6D0B9FAC8CB0D0A";//内容是“中国人”三个字。
char st2[N];
int char2num(char ch);
for (i=0;i<N;i++)
st2[i]=0;
len=strlen(st);
j=0;
for (i=0;i<len;i+=2)
n=char2num(st[i])*16+char2num(st[i+1]);
st2[j++]=n;
printf("st2=%s",st2);
getch();
return 0;
int char2num(char ch) /*将字符转成数字*/
if (ch>='a')
return ch-'a'+10;
else if (ch>='A')
return ch-'A'+10;
else
return ch-'0';
参考技术B // 不知道你这个数组是怎么找的,我试了一下,这样可以输出
#include <stdio.h>
int main()
char a[100];
//scanf("%s",a);
//for(int i=0;i<7;i++)
//printf("%d ",a[i]);
//printf("%c%c%c%c%c%c",a[0],a[1],a[2],a[3],a[4],a[5]);
char b[100]=-42,-48,-71,-6,-56,-53,0;
printf("%s",b);
本回答被提问者和网友采纳 参考技术C //
不知道你这个数组是怎么找的,我试了一下,这样可以输出
#include
<stdio.h>
int
main()
char
a[100];
//scanf("%s",a);
//for(int
i=0;i<7;i++)
//printf("%d
",a[i]);
//printf("%c%c%c%c%c%c",a[0],a[1],a[2],a[3],a[4],a[5]);
char
b[100]=-42,-48,-71,-6,-56,-53,0;
printf("%s",b);
以上是关于C++ string2进制转16进制要怎么做的主要内容,如果未能解决你的问题,请参考以下文章
C语言怎么将超大的16进制数转换成10进制,这个16进制数是个大数,比如0x123456789ABCDEF12345这种