十进制转十六进制的有关问题
十进制转十六进制的问题
大家运行下这个代码
#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
大家运行下这个代码
#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