gpt4 book ai didi

c++ - 字符串编码问题?

转载 作者:行者123 更新时间:2023-11-30 05:03:08 28 4
gpt4 key购买 nike

我开发了一个 convertBase 函数,可以将一个值转换成不同的基数并返回。

string convertBase(string value, int fBase, int tBase) {
string charset = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/",
fromRange = charset.substr(0, fBase),
toRange = charset.substr(0, tBase),
cc(value.rbegin(), value.rend()),
res = "";
unsigned long int dec = 0;
int index = 0;

for(char& digit : cc) {
if (charset.find(digit) == std::string::npos) return "";
dec += fromRange.find(digit) * pow(fBase, index);
index++;
}
while (dec > 0) {
res = toRange[dec % tBase] + res;
dec = (dec - (dec % tBase)) / tBase;
}; return res;
}

代码在编码像 "Test" 这样的简单字符串并再次返回时工作,但在编码像 "Test1234567" 这样的长字符串时遇到问题,因为它被编码为 "33333333333333333333333333333333" 这似乎是绝对错误的!

为什么会发生这种情况以及如何解决这个问题?

最佳答案

long int 的大小通常为 32 位或 64 位,具体取决于您所使用的 CPU 架构,但它甚至可以具有其他大小。您正在向 dec 添加越来越大的数字。在某些时候,数字变得比 long int 可以容纳的更大,然后您的程序崩溃了。

如果您需要处理任意大的输入,则需要使用不同的方法。如果可以,请使用“bignum”或“bigint”库,如 GMP .

关于c++ - 字符串编码问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49580172/

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