C如何转换为十六进制整数

问题描述 投票:0回答:1

我在写一个将一个数字转换为十六进制的代码,结果得到一个随机的数字。%x),从一个大项目中,算是实施了一个大项目。sprintf (所以 sprintfprintf 显然是不允许的)。buffer 是用来组成一个没有任何占位符的字符串.先谢谢你。

这是我的代码。

int num = *(int*)ptrs[counter];
int tempnum=num;
int mod=0;
int length =0;
for(int i=0;tempnum !=0;i++)
{
    length++;
    tempnum /= 16;
}
int array[length];
for(int i= length; i>0;i--)
{
    mod = num%16;
    num = num/16;
    array[i] = mod;
}
for(int i=0;i<length;i++)
{
    if(array[i]<10)
        *buffer = array[i]+ '0';
    else
        *buffer = array[i] -10 + 'a';
    buffer++;
}

c arrays pointers hex
1个回答
2
投票

计算的for循环 array[i] 应该改成。

    for(int i = length-1; i>=0;i--) // i from (length - 1) to 0 instead of from length to 1.
    {
        mod = num%16;
        num = num/16;
        array[i] = mod;
    }

你不需要改变缓冲区的指针。你可以使用:

    for(int i=0;i<length;i++)
    {
        if(array[i]<10)
            buffer[i] = array[i]+ '0';
        else
            buffer[i] = array[i] + 55;
    }

然后不要忘记缓冲区末尾的空字符。

buffer[length] = '\0';

我没有看到声明中的 buffer 所以我提出了上述声明的解决方案。

 char buffer[length+1];

1
投票
for(int i= length; i>0;i--)
                {
                    mod = num%16;
                    num = num/16;
                    array[i] = mod;
                }

错误在array[i]到array[i -1]。

buffer = array[i] + '87';

我建议你使用。

buffer = array[i]-10 + 'a';

0
投票
printf("%i", (int)[any hexadecimal number]);

将打印这个'[任意十六进制数]'的整数形式。

© www.soinside.com 2019 - 2024. All rights reserved.