c语言输入一个字符串转换为十六进制并输出
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言输入一个字符串转换为十六进制并输出相关的知识,希望对你有一定的参考价值。
输入一字符串,如“123342abcdAFB1H”,,遇到非0-9,a-f,A-F的就退出,输出0x12,0x33,0x42......并统计十六进制的个数!!
#include <stdio.h>int IsHexChar(char ch)
if((ch>='0' && ch<='9') || (ch>='a' && ch<='f') ||(ch>='A' && ch<='F'))
return 1;
else
return 0;
int main()
char str[1000] = "123342abcdAFB1H";
int cnt = 0;
int i;
printf("input str:\\n");
//gets(str);
i = 0;
while(str[i]&&str[i+1])
if(IsHexChar(str[i]) && IsHexChar(str[i+1]))
cnt++;
printf(cnt==1?"0x%c%c":", 0x%c%c", str[i], str[i+1]);
i++;
i++;
else
break;
printf("\\ncnt = %d\\n", cnt);
return 0;
追问
printf(cnt==1?"0x%c%c":", 0x%c%c", str[i], str[i+1]);
这里出来的还是字符,其实我要的是数值,前面的0x可以不要的!
不早说 再来个 这下ok了吧
int IsHexChar(char ch)
if((ch>='0' && ch<='9') || (ch>='a' && ch<='f') ||(ch>='A' && ch<='F'))
return 1;
else
return 0;
unsigned char CharToValue(char c)
if(c>='0' && c<='9')
return c-'0';
if(c>='A' && c<='F')
return c-'A'+10;
if(c>='a' && c<='f')
return c-'a'+10;
unsigned char TwoCharToByte(char h,char l)
return (unsigned char)(CharToValue(h)*16 + CharToValue(l));
int main()
char str[1000] = "123342abcdAFB1H";
unsigned char data[100];
int cnt = 0;
int i;
printf("input str:\\n");
//gets(str);
i = 0;
while(str[i]&&str[i+1])
if(IsHexChar(str[i]) && IsHexChar(str[i+1]))
data[cnt] = TwoCharToByte(str[i],str[i+1]);
cnt++;
//printf(cnt==1?"0x%c%c":", 0x%c%c", str[i], str[i+1]);
i++;
i++;
else
break;
for(i=0;i<cnt;i++)
printf(i==0?"%x":", %x", data[i]);
printf("\\ncnt = %d\\n", cnt);
return 0;
参考技术A //哈哈哈哈,你们的程序也太长了吧,看咱来个笑傲江湖精简版:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()
char a[] = "123342abcdAFB1H";
char str[3] = 0, *p = &str[2];
int i, c;
for(i=0; i<sizeof(a); i=i+2)
memcpy(str, &a[i], 2);
c = strtol(str, &p, 16);
if(!(*p))
printf("0x%x, ", c );
else
break;
printf("\\n count=%d\\n", i/2);
return 0;
追问
你输入 空格试试!"12 334 2abcdA FB1H"
追答额,话说“123342abcdAFB1H”你认为是几个16进制数?
参考技术B #include<stdio.h>#include<string.h>
int main()
unsigned i,len;
int n=0;
char str[99]="123342abcdAFB1H",str1[99],str2[99]=" ";
sscanf(str,"%[0-9^a-f^A-F]",str1);
len=strlen(str1);
while(strlen(str1)>1)
sscanf(str1,"%2s",str2);
if(strlen(str1)!=len)printf(",");
printf("0x%s",str2);
n++;
for(i=0;i<strlen(str1)-2;i++)
str1[i]=str1[i+2];
str1[strlen(str1)-2]='\\0';
printf("\\nn=%d\\n",n);
return 0;
以上是关于c语言输入一个字符串转换为十六进制并输出的主要内容,如果未能解决你的问题,请参考以下文章
3. 从键盘上输入一个八进制数,利用指针将其转换为十进制数并输出 C语言 很急
c语言编写一程序,以字符串形式输入十进制数,将字符串对应的十进制数转换成二进制数,将得到的结果输出。