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

标签 c arrays string hex octal

我已经实现了一种将给定字符数组转换为十进制整数的方法。该方法从数组中取出每个字符,计算其十进制值并将其与 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/

相关文章:

c - 队列结构在被调用一次后丢失元素值

Python 表情符号搜索和替换未按预期工作

C 设置下一个指针时循环链表中的段错误

python - Cython 代码 : Python. h 没有那个文件或目录

C:从 OpenSSL 套接字读取

arrays - 如何使用ARKit框架获取随机图像?

javascript - array.forEach 和 angular.forEach 哪个更高效?

c - 如何在 GAS 中设置 .global 符号?

java - 如何制作一个Java猜谜游戏程序

c++ - 初始化字符串数组中的值 C++