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了吧

#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;

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语言编程(将十六进制字符串转换为十进制整数 )

C语言 字符串转数字 急急急

c语言编写一程序,以字符串形式输入十进制数,将字符串对应的十进制数转换成二进制数,将得到的结果输出。

c语言 从键盘上读入一个整型数,将其转化成字符串并输出。例如:输入123,则转换为字符串“123

用C语言编程:将输入的数字转换成二进制字符输出