gpt4 book ai didi

c++ - 在 C++ 中将 hexbin 或十进制字符串转换为 long long

转载 作者:行者123 更新时间:2023-11-28 07:24:15 25 4
gpt4 key购买 nike

我有这段代码可以处理像“19485”或“10011010”或“AF294EC”这样的字符串......

long long toDecimalFromString(string value, Format format){
long long dec = 0;
for (int i = value.size() - 1; i >= 0; i--) {
char ch = value.at(i);
int val = int(ch);
if (ch >= '0' && ch <= '9') {
val = val - 48;
} else {
val = val - 55;
}
dec = dec + val * (long long)(pow((int) format, (value.size() - 1) - i));
}
return dec;
}

此代码适用于所有不在 2 的补码中的值。如果我传递一个应该是十进制负数的十六进制字符串,我得不到正确的结果。

最佳答案

如果您不处理减号,它就不会自行处理。检查它,并记住你已经看到它的事实。然后,在最后,如果您看到 '-' 作为第一个字符,则否定结果。

其他要点:

  • 您不需要(也不想)使用 pow:它只是results = format * results + digit 每次通过。
  • 您确实需要验证您的输入,确保数字你获得的在基地是合法的(而且你没有任何其他奇怪的字符)。
  • 您还需要检查溢出。
  • 您应该使用 isdigitisalpha(或 islowerisupper) 用于字符检查。
  • 您应该使用例如val -= '0'(而不是 48)从字符代码到数字值的转换。
  • 你应该使用[i],而不是at(i),来阅读个人人物。使用通常的开发选项进行编译,以及如果出现错误,您会遇到崩溃,而不是异常。
  • 但是你可能应该使用迭代器,而不是索引,去通过字符串。它更加地道。
  • 你几乎肯定会接受大写和小写对于 alpha,也可能跳过前导空格。

从技术上讲,也不能保证字母顺序字符是有序且相邻的。在实践中,我认为你可以指望它用于 'A'-'F' 范围内的字符(或'a'-'f',但是将字符转换为数字的最可靠方法就是用查表。

关于c++ - 在 C++ 中将 hexbin 或十进制字符串转换为 long long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19010032/

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