gpt4 book ai didi

c - 八进制和十六进制的 stringTOint 转换

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

我已经实现了一种将给定字符数组转换为十进制整数的方法。该方法从数组中取出每个字符,计算其十进制值并将其与 10^n 相乘,其中 n 随着每次迭代而递增。

So for example the array 4711 would be converted like this. 1*10^0 + 1*10^1 + 7*10^2 + 4*10^3 = 4711 as decimal value.

我现在的问题是如何扩展功能,以便 stringTOint 方法也能够处理八进制和十六进制值,例如023 或 0x1A。

/** Converts the given array of characters into a decimal integer */
int stringTOint(char str[]) {
int i, flag, offset, n,base;
flag = 0;
base = 10;
char c = '0';
/*if the first char in the array is '-', the minus flag gets set */
if (str[0] == '-') {
flag = -1;
}
if (flag == -1) {
offset = 1;
} else {
offset = 0;
}
if(offset == 0) {
if (str[0] == '0' && (str[1] != 'x' && str[1] != 'X') ) {
base = 8; // Octal
} else if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X')) {
base = 16; // Hexadecimal
offset = offset + 2;
}
}else if(offset == 1) {
if (str[1] == '0' && (str[2] != 'x' && str[2] != 'X') ) {
base = 8; // Octal
} else if (str[1] == '0' && (str[2] == 'x' || str[2] == 'X')) {
base = 16; // Hexadecimal
offset = offset + 2;
}
}
n = 0;
/*Loop runs until terminating NULL gets found in array */
for (i = offset; str[i] != '\0'; i++) {
n = n * base + str[i] - c;
}
/*value becomes negative if the negative flag was set */
if (flag == -1) {
n = -n;
}
/* n gets returned */
return n;
}

最佳答案

您没有处理十六进制值的 AF 情况。

   for (i = offset; str[i] != '\0'; i++) {
int value = (str[i] > ='A' && stri[i]<='F')? (str[i]-'A'+10):(str[i]-'0');
n = n * base + value;
}

也就是说,如果 char 是 AF,只需从 char 中减去 A 并添加 10 获取十六进制表示形式。

注意:需要使用%X%x以十六进制表示法打印。

关于c - 八进制和十六进制的 stringTOint 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53518084/

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