可能重复:
c++ template for conversion between decimal and arbitrary base
我想将unsigned int
的实例转换为基数X中的std::vector<unsigned int>
实例,其中X是从2到unsigned int
可以表示的最大数字的任意数字。
编辑:我曾经在基数10中说过unsigned int
,但这得到了批评意见,我认为这是正确的,所以我将其删除以避免混淆。
有很多关于SO的问题和答案涵盖itoa
之类的东西,它可以转换为16或32或者一些小数字(this itoa
implementation page被指出为良好的资源)。我找不到比这更大的基地的转换。
注意:表现不是一个问题(在合理范围内)。
答案 0 :(得分:1)
这应该这样做。
std::vector<unsigned int> result;
unsigned int base = ...;
unsigned int input = ...;
while(input) {
result.push_back(input%base);
input /= base;
}
答案 1 :(得分:0)
std::vector<unsigned int> toBaseX(unsigned int number, unsigned int base)
{
std::vector<unsigned int> res;
if (number == 0)
{
res.push_back(0);
return res;
}
while (number > 0)
{
unsigned int currentDigit = number % base;
res.push_back(currentDigit);
number /= base;
}
return res;
}
答案 2 :(得分:0)
以下代码将x
转换为基本base
中的向量。如果需要,它还会使用额外的零填充结果向量,以满足结果向量的minSize
大小。
vector<unsigned int> intToAnyBase(unsigned int x, int base, int minSize = 1) {
assert(base >= 2);
// minSize allows us to pad the resulting vector
// with extra zeros at the front if needed
minSize = std::max(1, minSize);
std::vector<unsigned int> v;
while(x > 0) {
res.push_back(x % base);
x /= base;
}
// Append zeros to the "front" to satisfy 'minSize' requirement.
// This also adds support for x
if(v.size() < minSize) {
v.reserve(minSize);
while(v.size() < minSize)
v.push_back(0);
}
std::reverse(v.begin(), v.end());
return v;
}
请注意,在函数中反转得到的向量,以便例如十进制4产生{1,0,0}
作为结果,而不是{0,0,1}
。