将数字从dec转换为十六进制并反转,并将值分配给char数组的索引

时间:2018-10-30 15:05:10

标签: arrays char hex reverse

我有一个5字节的数组输出[0x00、0x00、0x00、0x00、0x ??]。 0x ??需要替换为整数n的十六进制值。 因此,如果我的dec值为20,则我的输出数组应该像这样:[0x00、0x00、0x00、0x00、0x14]。

我首先使用以下代码将dec值转换为十六进制:

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复制到output [4]?
我试图将以下内容分配给output [4],但没有将0x14复制到output [4]:* res,&res [0],res。

摘要
为了消除任何混乱,我列出了程序的输入和预期的输出。
输入:N = 20
输出:char output [] = [0x00、0x00、0x00、0x00、0x14]->这只是0和20的十六进制表示,而不是2D数组...

1 个答案:

答案 0 :(得分:0)

您可以使用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;
}