我在写一个将一个数字转换为十六进制的代码,结果得到一个随机的数字。%x
),从一个大项目中,算是实施了一个大项目。sprintf
(所以 sprintf
或 printf
显然是不允许的)。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++;
}
计算的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];
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';
printf("%i", (int)[any hexadecimal number]);
将打印这个'[任意十六进制数]'的整数形式。