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



im 编写用于将数字转换为十六进制的代码,并得到一个随机数作为结果。 起初我成功地转换了数字,但它的顺序相反(第一个 mod 必须是最后一个数字或字母(。 代码是大项目的一部分(对于%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++;
}

计算array[i]的 for 循环应更改为:

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] = '';

我在您的代码中没有看到buffer声明,因此我提出了上述声明的解决方案:

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

数组 [i] 到数组 [I-1] 的错误。

buffer = array[i] + '87';

我建议你使用:

buffer = array[i]-10 + 'a';
printf("%i", (int)[any hexadecimal number]);

将打印此"[任何十六进制数]"数字的整数形式

最新更新