2017-07-14 69 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

相关问题