我需要用C++将二进制转换成16进制,然后再把16进制转成2进制,现在不知道如何写这样一个程序。

无聊的职业生涯 2006-02-20 09:48:40
我现在有这样一堆字符串:0001 0100 0001 0100 1001 1000 1111 0110 需要把这些数字转成16进制的,请问如何转,
函数形式如:

char* Bin2Ox(char* psz /* "0001 0100 0001 0100 1001 1000 1111 0110"*/)
{
.........


return "0xAB";
}
...全文
661 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
redf0x_1 2006-02-20
  • 打赏
  • 举报
回复
16进制到二进制如法炮制
smartcomplier 2006-02-20
  • 打赏
  • 举报
回复
先用itoa(int,char*,16)转成16进制表示的字符串,也可用sprintf()转.
然后再用sprintf()转成二进制.


OK,给分吧!
redf0x_1 2006-02-20
  • 打赏
  • 举报
回复
#include "stdafx.h"

using namespace std;

int onebinary(char binary,int i)
{
if(binary=='1')
{
switch(i)
{
case 0:
return 1;
case 1:
return 2;
case 2:
return 4;
case 3:
return 8;
default:
return -1;
}
}
else
if(binary=='0')
return 0;
else
return -1;
}

char numtoletter(int letternumber)
{
char ch;
assert(letternumber>=0&&letternumber<=15);
if(letternumber>=0&&letternumber<=9)
ch = letternumber+'0';
else
ch = letternumber-10+'A';
return ch;
}

string convert(string input)
{
string output;
char ch;
int size=input.size();
int j=1,letternumber=0;
for(int i=size-1;i>=0;i--,j++)
{
letternumber+=onebinary(input[i],(j-1)%4);
if(j%4==0)
{
ch=numtoletter(letternumber);
output.insert(output.begin(),ch);
if(j%8==0)
output.insert(output.begin(),' ');
letternumber=0;
}
if(i==0&&j%4!=0)
{
ch=numtoletter(letternumber);
output.insert(output.begin(),ch);
}
}
output.insert(output.begin(),'x');
output.insert(output.begin(),'0');
return output;
}

int main()
{
string input,output;
char *p;
cout<<"please input the string to convert:\n";
cin>>input;
output = convert(input);
cout<<output<<endl;
}
learnlife 2006-02-20
  • 打赏
  • 举报
回复
用abcd表示一组
for(;;){
取一段;
(a-48)*8+(b-48)*4+(c-48)*2+(d-48)*1得到这个数;
转为16进制存储其对应字符就可以了;
}
  • 打赏
  • 举报
回复
哈哈,我知道是4个4个一组,可是怎么转换成16进制呢,我没有做过样的算法啊,
OpenHero 2006-02-20
  • 打赏
  • 举报
回复
4个4个一组
weis_mai 2006-02-20
  • 打赏
  • 举报
回复
如果不考虑机器字的长度,完全同意du51的解,但是考虑机器字的话,从后往前,以机器字长分组,每组调用du51的change函数。如32位机器上
#define MACHINE_WORD 32
len=strlen(src);
while (len) {
len-=MACHINE_WORD;
len=(len<0)?0:len;
change(des, src+len);
src[len]=0;
// To Use des
}
du51 2006-02-20
  • 打赏
  • 举报
回复
#include<iostream>
#include<cstring>
using namespace std;
void change(char *des,char *src)
{
if(!*src)return;
int temp=0;
while(*src)temp=temp*2+(*src++-48);
sprintf(des,"%s","0x");
sprintf(des+strlen(des),"%08x",temp);
}
int main()
{
char src[33]={0},des[11]={0};
cout<<"请输入你的数(B)"<<endl;
cin>>src;
change(des,src);
cout<<"十六进制是:"<<des<<endl;
system("PAUSE");
return 0;
}

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧