2017-07-14 90 views
-1

我需要一些幫助。我正在修改DecToHex函數。C解析dec到十六進制並輸出爲char []

對於輸入DecimalNumber設置= 7:

實際輸出:

sizeToReturn = 2; 
hexadecimalNumber[1] = 7; 
hexadecimalNumber[0] = N/A (is garbage); 

希望的輸出:

sizeToReturn = 3 
hexadecimalNumber[2] = 0 
hexadecimalNumber[1] = 7 
hexadecimalNumber[0] = N/A (is garbage) 

功能:

void DecToHex(int decimalNumber, int *sizeToReturn, char* hexadecimalNumber) 
{ 
    int quotient; 
    int i = 1, temp; 
    quotient = decimalNumber; 
    while (quotient != 0) { 
     temp = quotient % 16; 
     //To convert integer into character 
     if (temp < 10) 
      temp = temp + 48; else 
      temp = temp + 55; 
     hexadecimalNumber[i++] = temp; 
     quotient = quotient/16; 
    } 

    (*sizeToReturn) = i; 
} 

這將每個U8追加到一個數組:

for (int k = size - 1;k > 0;k--) 
     AppendChar(Str_pst, toAppend[k]); 
+0

請提供您如何期待您的輸出看起來像。 – tilz0R

+0

當我用DecToHex(7,&len,buff)調用你的函數後,buff的第一個字符不是'7',並且長度不是1,這是你的聲明暗示的。 buff的第一個字符是chr(200),第二個字符是chr(55)。 – jeff6times7

+0

你的輸入是什麼,你想要做什麼不明確 – Gopi

回答

3

你是真的很近,你可以在陣列中逆轉並添加'0'到開始毫不費力,或者你可以把它你擁有它的方式和主要照顧它。我認爲你在這個軸上纏繞的位置在你的功能hexadecimalNumber的索引中。雖然7產生一個十六進制數字,它應該是在指數hexadecimalNumber(除非你初始化i = 1),設置了混亂,處理轉換到字符串指標。只要保持索引筆直,初始化i = 0並使用hexadecimalNumber初始化爲全零,如果您只有索引1處的單個字符,請在開始處填充字符串0

下面是一個簡單的例子,可以幫助:

#include <stdio.h> 
#include <stdlib.h> 

#define NCHR 32 

void d2h (int n, char *hex) 
{ 
    int idx = 0, ridx = 0;  /* index & reversal index */ 
    char revhex[NCHR] = "";  /* buf holding hex in reverse */ 

    while (n) { 
     int tmp = n % 16; 
     if (tmp < 10) 
      tmp += '0'; 
     else 
      tmp += '7'; 
     revhex[idx++] = tmp; 
     n /= 16; 
    } 
    if (idx == 1) idx++;  /* handle the zero pad on 1-char */ 

    while (idx--) { /* reverse & '0' pad result */ 
     hex[idx] = revhex[ridx] ? revhex[ridx] : '0'; 
     ridx++; 
    } 
} 

int main (int argc, char **argv) { 

    int n = argc > 1 ? atoi (argv[1]) : 7; 
    char hbuf[NCHR] = ""; 

    d2h (n, hbuf); 

    printf ("int : %d\nhex : 0x%s\n", n, hbuf); 

    return 0; 
} 

0x前綴剛好高於格式化輸出的一部分。

示例使用/輸出

$ ./bin/h2d 
int : 7 
hex : 0x07 

$ ./bin/h2d 26 
int : 26 
hex : 0x1A 

$ ./bin/h2d 57005 
int : 57005 
hex : 0xDEAD 

如果你要處理的逆轉main()這樣你就可以在0x07釘,如果字符的數量hexadecimalNumber退換不到兩年,那麼你就可以做類似如下的內容:

void d2h (int n, int *sz, char *hex) 
{ 
    int idx = 0; 
    while (n) { 
     int tmp = n % 16; 
     if (tmp < 10) 
      tmp += '0'; 
     else 
      tmp += '7'; 
     hex[idx++] = tmp; 
     n /= 16; 
    } 
    *sz = idx; 
} 

int main (int argc, char **argv) { 

    int n = argc > 1 ? atoi (argv[1]) : 7, sz = 0; 
    char hbuf[NCHR] = ""; 

    d2h (n, &sz, hbuf); 

    printf ("int : %d\nhex : 0x", n); 
    if (sz < 2) 
     putchar ('0'); 
    while (sz--) 
     putchar (hbuf[sz]); 
    putchar ('\n'); 

    return 0; 
} 

輸出是一樣的

仔細查看,讓我知道你是否還有其他問題。

+0

偉大而全面的答案。謝謝 – doremifasolasido

相關問題