C 将十六进制字符串转换为int
编写一个C函数,该函数接受以null结尾的字符串,其中包含一个十六进制字符串,并返回整数值。您不能调用任何C库函数,除了strlen()来编码该函数。十进制字符串将仅包含从“0”到“9”以及从“A”到“F”的0-4个ASCII字符。不需要错误处理。如果字符串为空,则返回值0 我一直在尝试修正我的错误,但一旦我修正了它们,新的错误就会出现,导致我感到困惑C 将十六进制字符串转换为int,c,C,编写一个C函数,该函数接受以null结尾的字符串,其中包含一个十六进制字符串,并返回整数值。您不能调用任何C库函数,除了strlen()来编码该函数。十进制字符串将仅包含从“0”到“9”以及从“A”到“F”的0-4个ASCII字符。不需要错误处理。如果字符串为空,则返回值0 我一直在尝试修正我的错误,但一旦我修正了它们,新的错误就会出现,导致我感到困惑 #include <stdlib.h> /*used for EXIT_SUCCESS */ #include <stdio
#include <stdlib.h> /*used for EXIT_SUCCESS */
#include <stdio.h> /*used for printf */
#include <string.h> /* used for strlen */
#include <stdbool.h> /* used for bool */
#include <math.h>
unsigned int hexStringTouint(const char str[], int length, int n[])
{
int i, j;
int intvalue = 0;
int digit;
for(i = (length-1), j = 0; i --, j++)
{
if(n[i]>='0' && n[i] <='9')
{
digit = n[i] - 0x30;
}
else if(n[i]>= 'A' && n[i] <= 'F')
{
switch(n[i])
{
case 'A': digit = 10; break;
case 'B': digit = 11; break;
case 'C': digit = 12; break;
case 'D': digit = 13; break;
case 'E': digit = 14; break;
case 'F': digit = 15; break;
}
}
intvalue += digit*pow(16,j);
}
printf("int value is %d\n", intvalue);
return 0;
}
int main(void)
{
int i, length, intvalue;
unsigned char n[] = "";
printf("Enter your hexadecimal string: ");
scanf("%c\n", n);
intvalue = 0;
length = strlen(n);
return EXIT_SUCCESS;
}
\include/*用于退出成功*/
#include/*用于printf*/
#include/*用于strlen*/
#include/*用于bool*/
#包括
无符号整数hexStringTouint(常量字符str[],整数长度,整数n[]
{
int i,j;
int值=0;
整数位数;
对于(i=(长度-1),j=0;i--,j++)
{
如果(n[i]>='0'&&n[i]='A'&&n[i]OP的大部分代码都是正确的,但是存在各种编码错误
添加测试条件
// for(i = (length-1), j = 0; i --, j++)
// v
for(i = (length-1), j = 0; i >= 0; i --, j++)
// intvalue += digit*pow(16,j);
intvalue += digit*(1u << (4*j));
无法调用任何C库函数,strlen()除外。
缓冲区太小
// unsigned char n[] = "";
// scanf("%c\n", n);
char n[100] = "";
scanf("%99s", n);
hexStringTouint()
未在main()
中调用函数
存在其他问题
更简单的方法
for requires 3语句。您错过了中断循环的条件。在您的情况下,(i=(length-1),j=0;i>=0;i--,j++)的条件应该是。
可能重复的不使用pow(16,j)
。使用1提示:如果char c
是具有当前六位数字字符的变量:数字'0'
到'9'
的值为c-'0'
。类似的,数字'A'
到'F'
的值为c-'A'+0xa
。通常,接受大写字母和小写字母在这种情况下,toupper(c)
不会造成伤害。(它不会改变任何非字母字符。)总之:if(isxdigit(c))digit=isdigit(c)?c-'0':toupper(c)-'a'+0xa;
-一行字符…;-)相关:
// unsigned char n[] = "";
// scanf("%c\n", n);
char n[100] = "";
scanf("%99s", n);
unsigned hexStringTouint2(const char *str) {
unsigned value = 0;
while (*str) {
unsigned digit = hexCharTouint(*str); // tbd code
value = value*16 + digit;
str++;
}
return value;
}