gpt4 book ai didi

c - 如何将字符串转换为整数

转载 作者:行者123 更新时间:2023-11-30 16:34:17 25 4
gpt4 key购买 nike

我有一个 40 位十六进制数字存储在一个字符串中,我必须将它存储在一个名为 Int40 的结构中,该结构只包含一个指向 int 的指针。

 typedef struct Int40    
{
// a dynamically allocated array to hold a 40
// digit integer, stored in reverse order
int *digits;
} Int40;

这是我尝试过的

Int40 *parseString(char *str)
{
Int40 *value = malloc(sizeof(Int40) * MAX40);
for (int i = 0; i < MAX40; i++)
{
value[i] = (int)str[i];
}
return value;
}

int main()
{
Int40 *p;
p = parseString("0123456789abcdef0123456789abcdef01234567");
printf("-> %d\n", *p);
}

我知道 Int 不能包含 40 位数字,这就是为什么我尝试将字符串中的每个数字存储在整数数组中,但我的代码似乎不起作用。编辑:此外,该数字包含字母,因为它是一个十六进制数字,我是否必须获取该十六进制数字的 ascii 值才能将其存储在 int 数组中,我该怎么做?

最佳答案

您可能会执行类似以下操作(请注意,我省略了对参数 char* 的验证,并且还假设十六进制字符为小写)

// with if statements:

Int40 *parseString(char *str)
{
Int40 *value = malloc(sizeof(Int40) * MAX40);
// save the digits array locally (same memory address as value)
int* digits = value->digits;
for (int i = 0; i < MAX40; i++)
{
char c = str[i];

// decimal digits case
if (c >= '0' && c <= '9') {
digits[i] = c - '0'; // subtract '0' to get the numberical value of c
} else { // hex case
digits[i] = (c - 'a') + 10; // subtract 'a' to get the numerical value of c as 0 + 10 for hex characters A - F
}
}
return value;
}

替代方案:

// with a switch statements:

Int40 *parseString(char *str)
{
Int40 *value = malloc(sizeof(Int40) * MAX40);
// save the digits array locally (same memory address as value)
int* digits = value->digits;
for (int i = 0; i < MAX40; i++)
{
char c = str[i];
switch (c) {
// hex 10 - 15
case 'a': case 'b': case 'c':
case 'd': case 'e': case 'f':
digits[i] = (c - 'a') + 10;
break;
// hex 0 - 9
default:
digits[i] = c - '0';
}
}
return value;
}

关于c - 如何将字符串转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49371878/

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