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中,谢谢
我在网上找不到办法了,跪求

参考技术A #include <stdio.h>
#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进制

PHP 中如何进行 长16进制的字符串运算?

C语言怎么将超大的16进制数转换成10进制,这个16进制数是个大数,比如0x123456789ABCDEF12345这种

十进制转换ASCII怎么转?

16进制与10进制怎么互相转换