十进制转十六进制的有关问题

十进制转十六进制的问题
大家运行下这个代码
#include   <stdio.h>
char   *   itohs(unsigned   int,char   *);

int   main(void)
{
char   bin_str[2*sizeof(unsigned   int)+1],*result;
unsigned   int   number;
           
while(scanf( "%u ",&number)==1)
{
result=itohs(number,bin_str);      
printf( "%u   is   %s\n ",number,result);
}
      return   0;
}

char   *   itohs(unsigned   int   n,char   *   ps)
{
        int   i,k;
        int   size=2*sizeof(unsigned   int);

ps[size]= '\0 ';

for   (i=size-1;i> =0;i--)
{
k=n%16;
n/=16;

if   (k <10)
ps[i]= '0 '+k;
else
ps[i]= 'A '+(k-10);
}
        return   ps;
}

为什么只是声请2*sizeof(unsigned   int)+1这么大的空间?
为什么是unsigned?
为什么在tc下输入10显示为H002
而在DEV-C++下却是?000002(有5个0)
这是为什么?


------解决方案--------------------
为什么只是声请2*sizeof(unsigned int)+1这么大的空间?
因为4个bit(半个byte)对应十六进制数中的一个数,无论sizeof(unsigned int)为多少(2bytes or 4bytes), 最大的unsigned int型整数的十六进制数最多只有2*sizeof(unsigned int)个数
例如存储空间为2bytes(16bits)的unsigned int型整数
其最大的二进制数为: 11111111 11111111
那么最大十六进制数: FFFF

另外那个“+1”用来保存字符串结束符的。


为什么是unsigned?
你看不顺眼的话,可以去掉。


为什么在tc下输入10显示为H002
而在DEV-C++下却是?000002(有5个0)
这是为什么?
因为TC为DOS上的编程工具,在DOS时代,都是16位机器,所以他的unsigned int为16bit的,
DEV-C++是windows平台的开发工具,为32位的
PS:tc下输入10应该显示为000A
DEV-C++下应该为 0000000A