преобразовать число из dec в hex и наоборот и присвоить значение индексу массива char - PullRequest
0 голосов
/ 30 октября 2018

У меня есть выходной массив из 5 байтов [0x00, 0x00, 0x00, 0x00, 0x ??]. 0x ?? нужно заменить на шестнадцатеричное значение целого числа n. Поэтому, если мое значение dec равно 20, мой выходной массив должен выглядеть следующим образом: [0x00, 0x00, 0x00, 0x00, 0x14].

Я начал с преобразования значения dec в hex с использованием следующего кода:

int remainder, quotient, temp;
    int i = 1, j;
    char hexadecimalNumber[2];
    quotient = Num;
    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;
    }

    for (j = i - 1; j > 0; j--) {
        printf("%c", hexadecimalNumber[j]);
    }

Я могу вывести правильное шестнадцатеричное значение, когда печатаю массив в обратном порядке. Но я не уверен, как изменить это и назначить выходной массив.
hexadecimalNumber сам по себе является массивом. Могу ли я назначить это для output [4], чтобы мой выходной массив выглядел как [0x00, 0x00, 0x00, 0x00, 0x14]?

Обновление : я попробовал это, и при меньшем количестве строк кода я получаю массив с шестнадцатеричным значением в правильном порядке:

char res[2];
    if (Num <= 0xFF) {
        sprintf(&res[0], "%02x", Num);
    }

Итак, у res [0] есть 1, а у res [1] - 4. Как мне скопировать 0x14 в вывод [4]?
Я попытался назначить следующие вещи для вывода [4], но не копировал 0x14 в вывод [4]: ​​* res, & res [0], res.

Резюме
Чтобы устранить любые недоразумения, я перечислил входные данные для программы и ожидаемый результат.
Ввод: N = 20
Output: char output [] = [0x00, 0x00, 0x00, 0x00, 0x14] -> Это просто шестнадцатеричное представление 0 и 20, а не двумерный массив ...

1 Ответ

0 голосов
/ 30 октября 2018

Вы можете использовать snprintf решить

Может работать следующее code:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <math.h>

int main()
{
    char output[5][5] = {"0x00", "0x00", "0x00", "0x00", "0x??"};
    int n = 20;

    if (n <= 0xFF)
        snprintf(output[4], sizeof(output[4]), "0x%02X", n);

    for (int i = 0; i != 5; ++i)
        printf("%s\n", output[i]);

    return 0;
}
...