C 颠倒字符串

C 颠倒字符串,c,arrays,c-strings,C,Arrays,C Strings,基本上,我有一个方法,可以将十进制数转换为不同基数的数字,例如,基数2,数组中0位置的元素是最重要的,例如$100,1是最重要的 如果我输入一个字符串,该字符串应该输出AC,那么我得到CA Dec到hex。如何在C中反转这个字符数组 char* decimalToRadixN(int decimalNumber, int radixN, char result[]){ /* If its below base 10, its going to be a digit con

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

如果我输入一个字符串,该字符串应该输出AC,那么我得到CA Dec到hex。如何在C中反转这个字符数组

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;
}

这不是问题的答案,但为什么不先把数字按正确的顺序写下来呢

毫无疑问,你不知道你需要多少位数,所以从哪里开始写

这可以通过将数字的日志作为基数来完成。这可以使用的规则

[还要注意的是,您的“小数”从来不是真正的小数。它是一个C int,真正的二进制。这只是命名,没有什么区别。它从printf中显示为基数10是printf的解释,而不是数字本身。]

现在你有了给定基数中的位数,只需对该位数进行写入,然后递减而不是递增

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


不要忘记使用null终止,或者提供返回写入字符串长度的支持。

交换元素,直到到达中间位置。顺便说一句,你怎么知道结果会怎样?谢谢你的帮助,克里斯,这正是我所需要的-
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';
int numDigitsForRadix(double decimalNumber, double radixN)
{
    double numDigits = log(decimalNumber)/ log(radixN);
    int intDigits = (int)numDigits + 1;
    return intDigits;
}