2011-09-08 17 views
-1

基本的には、10進数を別のベース(ex、base 2)の数値に変換する方法があります。配列の位置0の要素が最も重要なのはex $ 100です。最も重要です。ストリングを逆転する

ACを出力するはずの文字列を入れると、CA(Dec to 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; 
} 
+0

あなたが真ん中になるまで要素を入れ替えます。ところで、「結果」がどこで終わるのかあなたはどのように知っていますか? –

答えて

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'; 
+0

助けてくれてありがとう、クリス、それはちょうど私が必要なものです。 :-) –

0

ない質問への答えは非常に尋ねたが、なぜちょうど最初の場所で右の順に数字を書き込みませとして?

あなたが何桁の数字を必要としているのか分かりませんでした。

これは、数値のログを基数の基数とすることで実現できます。これは、logarithmsの規則を使用して行うことができます。

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

['decimalNumber'は決して10進数ではありません。これはC intで、実際はバイナリです。これはちょうど命名であり、違いはありません。それはprintf()からベース10と表示されていることをprintf()の解釈ではなく、数そのものである。]

は今、あなたは指定されたベースの桁数を持っている、ちょうどその数字とデクリメントではなく、増分に書き込みます。

また、使用可能な長さの結果を渡すと、使用可能な長さの前に確認し、エラーコード(たとえば、NULL)を返すことができます。

nullを終了するか、そうでなければ、書かれた文字列の長さを返すサポートを提供することを忘れないでください。

関連する問題