gpt4 book ai didi

c - 如何让我的十六进制输出8位数字(包括前导零)

转载 作者:行者123 更新时间:2023-11-30 15:45:02 25 4
gpt4 key购买 nike

因此,我编写了一个函数,通过使用递归将十进制数转换为十六进制数,但我似乎不知道如何将前缀“0x”和前导零添加到转换后的十六进制数中。假设我将数字 18 传递到函数的参数中。等效的十六进制数应为 0x00000012。然而,我最终只得到 12 作为我的十六进制数。当我传入十六进制数 0xFEEDDAD 时,同样适用。我最终只得到没有前缀的 FEEDDAD 作为我的答案。有人可以帮我解决这个问题吗?我在下面列出了我的代码。另外,我只允许使用 fputc 来显示我的输出。

const char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

void hexout (unsigned long number, FILE * stream)
{
long quotient;
long remainder;

quotient = number / 16;
remainder = number % 16;


if(quotient != 0)
hexout(quotient,stream);


fputc(digits[remainder],stream);
}

最佳答案

void hexout (unsigned long number, FILE * stream) 
{
fprintf(stream, "0x%08lX", number);
}

如果你不能使用fprintf(也不能使用sprintf),你可以使用这种代码(没有递归,但在堆栈上有一个8个字符的数组):

const char digits[] = "0123456789ABCDEF";

void hexout(unsigned long number, FILE * stream)
{
unsigned long int input = number;
unsigned long int quotient;
unsigned long int remainder;
unsigned short ndigit = 0;
char result[8] = {0};

// Compute digits
do
{
quotient = input / 16;
remainder = input % 16;
result[7-ndigit] = digits[remainder];
input = quotient;
ndigit++;
}
while (ndigit < 8);

// Display result

fputc('0', stream);
fputc('x', stream);
for (ndigit = 0; ndigit < 8; ndigit++)
{
fputc(result[ndigit], stream);
}
}

当然,这还可以改进很多...

关于c - 如何让我的十六进制输出8位数字(包括前导零),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19241685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com