gpt4 book ai didi

将十六进制字符串转换为 int

转载 作者:行者123 更新时间:2023-11-30 14:38:18 25 4
gpt4 key购买 nike

编写一个 C 函数,该函数接受一个以 null 结尾的字符串,其中包含一个十六进制字符串,并返回整数值。除了 strlen() 之外,您不能调用任何 C 库函数来对函数进行编码。十进制字符串仅包含从“0”到“9”和“A”到“F”的 0-4 个 ASCII 字符。不需要错误处理。如果字符串为空,则返回值 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;
}

我收到错误消息说预期为“;”在“for”语句说明符中以及 const char* 如何在指针和整数之间转换。

最佳答案

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

关于将十六进制字符串转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56712852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com