-1

基本上,我有一种方法可以将十进制数转换为不同基数(例如,基数 2)的数字,数组位置 0 的元素是最重要的,例如 100 美元,1 是最重要的。

如果我输入一个应该输出 AC 的字符串,我会得到 CA (Dec to hex)。如何在 C 中反转这个 char 数组?

char* decimalToRadixN(int decimalNumber, int radixN, char result[]){
    /*
        If its below base 10, its going to be a digit convertsion (ex to binary)
        If it's above base 10, we need to call a method to convert the char to a symbol. 
     */

        //char swap[] = result[];

    int count = 0; 
    while(decimalNumber>0)
    {
        int remain = decimalNumber % radixN;
        result[count] = decimalToSymbol(remain);
        decimalNumber = decimalNumber / radixN; 
        count++;
    }

    /*
    for(int i = 0; i < count; i++)
    {
          reverse the array
    }
    */ 
  return result;
}
4

2 回答 2

2
int i, j;
for( i = 0, j = count - 1; i < j; i++, j-- )
{
    char temp = result[ i ];
    result[ i ] = result[ j ];
    result[ j ] = temp;
}
result[ count ] = '\0';
于 2011-09-09T00:10:47.083 回答
0

不完全是所问问题的答案,但为什么不首先按正确的顺序写数字呢?

毫无疑问,您不知道需要多少位数,因此从哪里开始编写。

这可以通过将数字的日志记录到基数来完成。这可以使用对规则来完成。

int numDigitsForRadix(double decimalNumber, double radixN)
{
    double numDigits = log(decimalNumber)/ log(radixN);
    int intDigits = (int)numDigits + 1;
    return intDigits;
}

[还请注意,您的'decimalNumber'从来都不是真正的小数。它是一个 C int,真正的二进制。这只是命名,没有区别。它以 10 为底printf()是对 的解释printf(),而不是数字本身。]

现在您有了给定基数的位数,只需写入该数字并减少而不是增加。

此外,如果您传入结果的可用长度,您可以预先根据可用长度验证所需的长度,如果是,则返回错误代码(例如NULL)。

并且不要忘记空终止,或者以其他方式提供对返回写入字符串长度的支持。

于 2011-09-09T00:37:21.077 回答