簡體   English   中英

C將dec解析為十六進制,並輸出為char []

[英]C parse dec to hex and output as char[]

我需要一些幫助。 我想修改DecToHex函數。

對於輸入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' ,或者可以按原樣保留它並在主目錄中進行處理。 我認為您會受到困擾的地方是函數中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()處理逆轉,因此如果hexadecimalNumber返回的字符數少於兩個,則可以添加0x07 ,那么您可以執行以下操作:

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

輸出是一樣的

查看一下,如果您還有其他問題,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM