gpt4 book ai didi

C 将十进制解析为十六进制并输出为 char[]

转载 作者:行者123 更新时间:2023-11-30 18:35:46 25 4
gpt4 key购买 nike

我需要一些帮助。我正在寻求修改 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;
}

This will append each u8 to an array :

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 > 小于 2,那么您可以执行类似以下操作:

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

输出相同

仔细检查一下,如果您还有其他问题,请告诉我。

关于C 将十进制解析为十六进制并输出为 char[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45095561/

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