c++ - Htoi 10 位数字的输出不正确

标签 c++ string function hex decimal

当我输入 0x123456789 我得到不正确的输出,我不知道为什么。起初我以为这是一个最大可能的 int 值问题,但是我将我的变量更改为 unsigned long 并且问题仍然存在。

#include <iostream>
using namespace std;

long htoi(char s[]);

int main()
{
    cout << "Enter Hex \n";
    char hexstring[20];
    cin >> hexstring;
    cout << htoi(hexstring) << "\n";

}

//Converts string to hex
long htoi(char s[])
{
    int charsize = 0;
    while (s[charsize] != '\0')
    {
        charsize++;
    }
    int base = 1;
    unsigned long total = 0;
    unsigned long multiplier = 1;
    for (int i = charsize; i >= 0; i--)
    {
        if (s[i] == '0' || s[i] == 'x' || s[i] == 'X' || s[i] == '\0')
        {
            continue;
        }
        if ( (s[i] >= '0') && (s[i] <= '9') )
        {
            total = total + ((s[i] - '0') * multiplier);
            multiplier = multiplier * 16UL;
            continue;
        }
        if ((s[i] >= 'A') && (s[i] <= 'F'))
        {
            total = total + ((s[i] - '7') * multiplier); //'7' equals 55 in decimal, while 'A' equals 65
            multiplier = multiplier * 16UL;
            continue;
        }
        if ((s[i] >= 'a') && (s[i] <= 'f'))
        {
            total = total + ((s[i] - 'W') * multiplier); //W equals 87 in decimal, while 'a' equals 97
            multiplier = multiplier * 16UL;
            continue;
        }
    }
    return total;
}

最佳答案

long 在您的计算机上可能也是 32 位。试试 long long

关于c++ - Htoi 10 位数字的输出不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33710769/

相关文章:

c++ - 最佳数据结构存储文本文件中的数字集

c++ - 为什么我会收到一条错误消息,告诉我构造函数没有命名类型?

java - 在 Java 中拆分字符串的最佳方法

c++ - 如何将指针映射公开为 const 指针映射?

c++ - 使用 GCC Undefined Behavior Sanitizer

string - 我如何在 Rust 中将 &str 转换为 ~str?

javascript - 如何将html代码转换为字符串,用\n替换换行符,用\t替换制表符

php - 查询正在执行两次

java - 从递归到迭代

javascript - Javascript 中的自调用函数有害吗?