编写一个C函数,该函数接受一个以空值结尾的字符串(包含一个十六进制字符串),并返回整数值。您不能调用任何C库函数,但strlen()除外才能对该函数进行编码。十进制字符串将仅包含0-4个ASCII字符,从'0'到'9',从'A'到'F'。无需错误处理。如果字符串为空,则返回值0。
我一直在尝试修复错误,但是一旦修复,就会弹出新错误,使我感到困惑。
#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;
}
我收到错误消息说
expected ';' in 'for' statement specifier
以及const char *如何在指针和整数之间转换。
答案 0 :(得分:1)
OP的大部分代码是正确的轨道,但是仍然存在各种编码错误。
添加测试条件
// for(i = (length-1), j = 0; i --, j++)
// v
for(i = (length-1), j = 0; i >= 0; i --, j++)
除strlen()以外,无法调用任何C库函数
// intvalue += digit*pow(16,j);
intvalue += digit*(1u << (4*j));
返回值
要求“ ...并返回整数值”
//int intvalue = 0;
//...
//printf("int value is %d\n", intvalue);
//return 0;
unsigned intvalue = 0;
...
printf("integer value is %u\n", intvalue);
return intvalue;
缓冲区太小
// unsigned char n[] = "";
// scanf("%c\n", n);
char n[100] = "";
scanf("%99s", n);
hexStringTouint()
在main()
中未调用的函数。
存在其他问题
一种更简单的方法
unsigned hexStringTouint2(const char *str) {
unsigned value = 0;
while (*str) {
unsigned digit = hexCharTouint(*str); // tbd code
value = value*16 + digit;
str++;
}
return value;
}