【发布时间】:2010-02-19 06:15:55
【问题描述】:
我现在正在尝试将整数转换为字符串,但遇到了问题。
我已经编写了大部分代码并且可以正常工作,但是在携带到下一个地方时它有一个小缺陷。很难描述,所以我举个例子。使用 base 26 和由小写字母组成的字符集:
0 = "a"
1 = "b"
2 = "c"
...
25 = "z"
26 = "ba" (这应该等于 "aa")
在某些情况下似乎会跳过字符集中零位的字符。
让我感到困惑的是我的代码没有任何问题。我一直在研究这个太久了,我仍然无法弄清楚。
char* charset = (char*)"abcdefghijklmnopqrstuvwxyz";
int charsetLength = strlen(charset);
unsigned long long num = 5678; // Some random number, it doesn't matter
std::string key
do
{
unsigned int remainder = (num % charsetLength);
num /= charsetLength;
key.insert(key.begin(), charset[remainder]);
} while(num);
我感觉函数在返回零的模数上出错了,但我一直在研究这个问题,我不知道它是如何发生的。欢迎提出任何建议。
编辑:生成的字符串是小端的事实与我的应用程序无关。
【问题讨论】:
-
旁注:您对数据类型的选择是可疑的。为什么
charset不是const char*? (这会让你摆脱 C 风格的演员表。)为什么charsetlength不是std::size_t- 这是std::strlen()返回的类型。如果num是unsigned long long,那么(在常见平台上)将其除以26 的结果如何适合unsigned int? -
我或多或少地写了这段代码作为一个例子,尽管你的观点是有效的和赞赏的。