我有一个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数组...
答案 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;
}