怎么用C语言实现将二进制字符串变换为16进制数?比如将“00010001”怎么转变为“0x11”?谢谢! C语言将二进制数N转换成16进制的程序

C\u8bed\u8a00\u5982\u4f55\u628a11\u4f4d16\u8fdb\u5236\u5b57\u7b26\u4e32\u8f6c\u621016\u8fdb\u5236\u6570\uff1f

#include
#include
voidmain()
{
char*p="0x1b";
char*str;
longi=strtol(p,&str,16);
printf("%d\r\n",i);
}

//\u8f93\u51fa\u503c\u4e3a27
\u53c2\u6570base\u4ee3\u8868\u91c7\u7528\u7684\u8fdb\u5236\u65b9\u5f0f\uff0c\u5982base\u503c\u4e3a10\u5219\u91c7\u752810\u8fdb\u5236\uff0c\u82e5base\u503c\u4e3a16\u5219\u91c7\u752816\u8fdb\u5236\u7b49\u3002\u5f53base\u503c\u4e3a0\u65f6\u5219\u662f\u91c7\u752810\u8fdb\u5236\u505a\u8f6c\u6362\uff0c\u4f46\u9047\u5230\u5982\u20190x\u2019\u524d\u7f6e\u5b57\u7b26\u5219\u4f1a\u4f7f\u752816\u8fdb\u5236\u505a\u8f6c\u6362\u3001\u9047\u5230\u20190\u2019\u524d\u7f6e\u5b57\u7b26\u800c\u4e0d\u662f\u20190x\u2019\u7684\u65f6\u5019\u4f1a\u4f7f\u75288\u8fdb\u5236\u505a\u8f6c\u6362\u3002

\u6269\u5c55\u8d44\u6599
C\u8bed\u8a00\u5341\u8fdb\u5236\u8f6c2\uff5e16\u8fdb\u5236
#include

voidtrans(intdata,intbase)

{

intx[64],k,i=0;

while(data)

{

x[i]=data%base;

data/=base;

i++;

}

for(k=i-1;k>=0;k--)

if(x[k]<10)

printf("%d",x[k]);

elseif(x[k]<=16)

printf("%c",'A'+x[k]-10);

}

intmain(void)

{

intnum,base;

scanf("%d%d",&num,&base);

if(base16)

{

printf("dataerror\n");

return;

}

printf("number=%dbase=%d\n",num,base);

trans(num,base);

printf("\n");

return0;

}

\u8fd9\u6bb5\u4ee3\u7801\u4f60\u8bd5\u8bd5\uff0c\u7531\u4e8e\u53d6\u503c\u8303\u56f4\u7684\u9650\u5236\uff0c\u53ea\u80fd\u5b9e\u73b08\u4f4d\u4e8c\u8fdb\u5236\u7684\u8f6c\u6362
\u4f60\u53ef\u4ee5\u8bd5\u8bd5\u6269\u5927\u53d6\u503c\u8303\u56f4\uff0c\u52a0\u4ee5\u76f8\u5e94\u53d8\u5316
\u4e2a\u4eba\u80fd\u529b\u6709\u9650\uff0c\u629b\u7816\u5f15\u7389\uff0c\u5e0c\u671b\u80fd\u7ed9\u4f60\u70b9\u542f\u53d1\u3002\u3002\u3002
#include
#include
void main()
{int a,b=1,c,d,e;
int i,j=0,num[8],s[8];
char zh[8];
int shuju(int x);
scanf("%d",&a);

/*\u5b9e\u73b0\u4e8c\u8fdb\u5236\u7684\u5206\u89e3\u8f93\u5165\uff0c\u628a\u4e8c\u8fdb\u5236\u7684\u6bcf\u4e00\u4f4d\u6570\u503c\u5bfc\u5165\u5230\u6570\u7ec4\u5f53\u4e2d*/
if(-1<a&&a<11111112)
{for(i=0;i<8;i++)
{b=10*b;
c=b/10;
d=a/c;
num[i]=d%10;
if(num[i]>1)
{printf("\u8f93\u5165\u9519\u8bef\uff0c\u4e0d\u7b26\u5408\u4e8c\u8fdb\u5236\n");
e=1;
break;}}}
else{printf("\u8f93\u5165\u9519\u8bef\uff0c\u8d85\u51fa\u8303\u56f4\n");
e=1;}

/*\u5bf9\u6570\u7ec4\u4e2d\u7684\u503c\u8fdb\u884c\u91cd\u7ec4\uff0c\u6bcf4\u4f4d\u7f16\u6210\u4e00\u4e2a\u56db\u4f4d\u6570\u4e0e\u5b50\u51fd\u6570\u5b9e\u73b0\u5bf9\u6bd4\u8c03\u7528*/
if(e!=1)
{for(i=0;i<8;i=i+4,j++)
{s[j]=num[i]+num[i+1]*10+num[i+2]*100+num[i+3]*1000;
zh[j]=shuju(s[j]);
}
for(;j-1>=0;j--)
{if(zh[j-1]<10) printf("%d",zh[j-1]);
else printf("%c",zh[j-1]);}
printf("\n");
};
}



/*\u5bf9\u6bd4\u8c03\u7528*/
int shuju(int x)
{char y;
switch(x)
{case 0: y=0;break;
case 1: y=1;break;
case 10: y=2;break;
case 11: y=3;break;
case 100: y=4;break;
case 101: y=5;break;
case 110: y=6;break;
case 111: y=7;break;
case 1000: y=8;break;
case 1001: y=9;break;
case 1010: y='A';break;
case 1011: y='B';break;
case 1100: y='C';break;
case 1101: y='D';break;
case 1110: y='E';break;
case 1111: y='F';break;
}
return(y);}

将你要转化的数值例如00010001从右开始数,4位数一次,每4位转化成16进制的字符就可以了.
4为转16进制可以使用穷举法,0001=1,0010=2,.....1001=9,1010=A,....,1111=F
总共写16个就OK了!

先转成10进制,,,,,,再转16进制,可以 用sprintf
~~~~~~
~~~~~~
~~~~~~~~~~~

#include <stdio.h>
#include <math.h>
#include <string.h>

int main(void)
{
char szBuff[65] = {0};
int i, j = 0;
int len = 0;
int sum = 0;

printf("输入字符串:");
gets(szBuff);
printf("%s=0X", szBuff);
len = strlen(szBuff);
for (i = len-1; i >= 0; --i)
{
if (szBuff[i] == '1')
{
sum += ldexp(1, j);
}
else if (szBuff[i] != '1' && szBuff[i] != '0')
{
printf("输入错误!\n");
return 1;
}
++j;
j %= 4;
if (j == 0)
{
printf("%01x", sum);
sum = 0;
}
}
printf("\n");

return 0;
}

  • c璇█濡備綍鐢熸垚闀垮害涓簄鐨浜岃繘鍒跺瓧绗︿覆鐨勫叏鎺掑垪
    绛旓細include "stdio.h"int main(int argc,char *argv[]){int n,i,m;char p[33];printf("please enter n(int n>0)...\n");if(scanf("%d",&n)!=1 || n<1 || n>32){printf("Input error, exit...\n");return 0;}for(i=0;i<n;p[i++]='0');p[i]='\0';for(m=1...
  • 鎬ユ眰!C璇█涓灏嗕簩杩涘埗鏂囦欢鍐欏叆鏁扮粍骞惰緭鍑轰负ASCII鏂囦欢鏍煎紡!
    绛旓細涓嬮潰鏄垰鍐欑殑绋嬪簭 include<stdio.h> include<math.h> void main(){ char n;int a[100],i,j=0,m;printf("璇疯緭鍏浜岃繘鍒鐮佺殑浣嶆暟(灏忎簬100浣)\n");scanf("%d",&m);printf("璇疯緭鍏ヨ浜岃繘鍒剁爜,姣忎釜浜岃繘鍒剁爜涔嬮棿鐢╡nter闅斿紑\n");for(i=0;i<m;i++)scanf("%d",&a[i]);for(i=0;...
  • 鐢–璇█鍋氫竴涓妸鏁存暟鎹㈡垚浜岃繘鍒跺瓧绗︿覆鐨勪唬鐮
    绛旓細/*integer to binary string*/#include<stdio.h>char * itobs(int, char*);void show_bstr(const char*);int main(){char bin_str[8 * sizeof(int) + 1];int number;puts("Enter integers and see them in binary.");puts("Non-numeric input terminates program.");while (scanf("%d...
  • c璇█鐨浜岃繘鍒鏁板濡備綍鐩存帴杈撳嚭?
    绛旓細C鏍囧噯娌℃湁杈撳嚭浜岃繘鍒剁殑锛屼笉杩囩敤itoa()鍙互瀹炵幇鍒颁簩杩涚殑杞崲 鍙互浣跨敤itoa鍑芥暟鎶婂彉閲忕殑鏁板艰浆鎹㈡垚2杩涘埗瀛楃涓锛屽啀鐢ㄨ緭鍑哄嚱鏁拌緭鍑恒傜敤 娉:char *itoa(int value, char *string, int radix);璇︾粏瑙i噴:itoa鏄嫳鏂噄nteger to array(灏唅nt鏁村瀷鏁拌浆鍖栦负涓涓瓧绗︿覆,骞跺皢鍊间繚瀛樺湪鏁扮粍string涓)鐨勭缉鍐.鍙傛暟锛...
  • C璇█濡備綍杈撳嚭浜岃繘鍒?
    绛旓細1锛C璇█娌℃湁鐩存帴杈撳嚭浜岃繘鍒鐨勬柟娉曘2锛屽叓杩涘埗鍦ㄨ緭鍑虹殑鏃跺欎互0寮澶达紝渚嬪锛0123鍗佽繘鍒剁殑83 3锛屽崄杩涘埗姝e父杈撳嚭锛屾棤鐗瑰埆琛ㄧず銆4锛屽崄鍏繘鍒跺湪杈撳嚭鐨勬椂鍊欎互0X鎴栬0x寮澶达紝渚嬪0x123 鍗佽繘鍒剁殑291銆
  • c璇█瀛楃涓叉庝箞鐢ㄤ簩杩涘埗瀛樺偍
    绛旓細浣犱娇鐢 浣嶅煙 璇曡瘯锛歶nsigned char c锛1锛泆nsigned char d锛1锛泆nsigned char e锛1锛泆nsigned char f锛1锛泆nsigned char g锛1锛泆nsigned char h锛1锛泆nsigned char i锛1锛泆nsigned char j锛1锛沜銆乨銆乪銆乫銆乬銆乭銆乮銆乯閮芥槸鍗犱竴bit鐨勶紝濡傛灉浣犵殑瀵嗙爜鏄叓浣浜岃繘鍒鏁帮紝灏卞垎寮璧嬪 ...
  • 姹鐢–璇█缂栧啓浠g爜,杈撳叆浜岃繘鍒鏁,杈撳嚭鍗佽繘鍒舵暟,鍏繘鍒舵暟,鍗佸叚杩涘埗鏁
    绛旓細//#include "stdafx.h"//vc++6.0鍔犱笂杩欎竴琛.include "stdio.h"void main(void){ char binary[33],i=0,x;int n=0;printf("Type a binary(<33 bit)...\n");while((x=getchar())=='0' || x=='1'){ binary[i++]=x;if(i==33) break;} binary[i]='\0';for(i=0;...
  • 濡備綍灏嗕簩杩涘埗瀛楃涓杞崲鎴愭暣鍨嬫暟鎹
    绛旓細浣跨敤Windows鑷甫鐨勮绠楀櫒灏辫兘瀹炵幇 寮濮嬭彍鍗-绋嬪簭-闄勪欢-璁$畻鍣 鏌ョ湅-绉戝鍨.鐐瑰嚮"浜岃繘鍒",鎸塁trl+v杈撳叆浣犵殑浜岃繘鍒.涔嬪悗鐐"鍗佽繘鍒".O C浠g爜锛歩nclude "stdio.h"include "math.h"main(){ int a,b,sum;int d=1;char str[100];for(a=0;(str[a]=getche())!=0x0d;a++)if(str[a]>'1'...
  • C璇█涓鎬庝箞杈撳嚭鏁版嵁鐨浜岃繘鍒
    绛旓細娌℃湁涓撻棬鐨勮緭鍑浜岃繘鍒璇彞 闇瑕佽嚜宸卞啓鍑芥暟銆傛瘮濡 void print_bin(int n){ int i; for(i=sizeof(n)*4-1; i>=0; i --) { if(n&(1<
  • 鐢╟璇█鎶涓涓浜岃繘鍒姣斿10011鎸変綅瀛樺偍杩涙暟缁勯噷 姣斿a[0]=1,a[1]=...
    绛旓細涓嬮潰鐨勭▼搴忓彲浠ヨ鍏ヤ竴涓浜岃繘鍒鏁帮紝骞跺畬鎴+1鐨勬搷浣滐紝浣嗘槸蹇呴』淇濊瘉鏈楂樹綅娌℃湁杩涗綅銆#include<stdio.h>int main(){int i; char a[101]; scanf("%s",a); for(i=0;a[i];i++); a[--i]++; while(i>0&&a[i]>'1') {a[i]='0'; a[--i]++; } printf("%s\n",a); return ...
  • 扩展阅读:一张图看懂二进制 ... 二进制对照表大全 ... 1-100二进制对照表 ... 字符转二进制 c语言 ... c语言二进制输出符号 ... 二进制最简单的理解 ... 二进制算法最简单教程 ... 二进制的减法的图解 ... 二进制编程图 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网