基于visual Studio2013解决面试题之1203转16进制输出




题目



解决代码及点评

 
 
 
 
/*
	将数字转化成16进制输出
*/



#include <iostream>
using namespace std;

char * get2String(long num)
{
	int i = 0;
	char * buffer = NULL;
	char * temp = NULL;

	buffer = (char *)malloc(33);
	temp = buffer;

	for(i=0; i<32; i++)              
	{
		temp[i] = num & (1 << (31 - i));		
		temp[i] = temp[i] >> (31 - i);
		temp[i] = (temp[i] == 0) ? '0' : '1';
		temp[i] = (char)(num<<4*i>>28); 
		/*左移4i位 去掉高位的4i 右移28位 去掉右边的 这就获得4个bit
		第一次是最高位32-29 4个bit 第二次 28-25 4个bit
		temp[i] = temp[i] >= 0 ? temp[i] : temp[i] + 16; 
		 然后因为它可能是个有符号的数 所以加上16 吧这个数变成0~15之间的正数
		temp[i] = temp[i] < 10 ? temp[i] + 48 : temp[i] + 55;
		然后<10 就是变成字符‘0’~‘9’ 所以加上48, 如果>=10 那就要用 'A'~'F'来表示
		所以加上55, 因为'A'变成整数正好是65*/
	}
	buffer[32] = '\0';

	return buffer;
}
char * get16String(long num)
{
	int i = 0;
	char * buffer = (char *)malloc(11);
	char * temp = buffer;

	//buffer[0] = '0';
	//buffer[1] = 'x';
	buffer[10] = '\0';

	for(i=0; i<10; i++)
	{														
		temp[i] = (char)( (num << (4 * i)) >> 28);
		temp[i] = temp[i] >= 0 ? temp[i] : temp[i] + 16;
		temp[i] = temp[i] < 10 ? temp[i] + 48 : temp[i] + 55;
	}
	return buffer;
}

int main()
{
	char *p = NULL;
	char *q = NULL;
	int num = 0;

	printf("input num: ");
	scanf_s("%d", &num);

	p = get16String(num);
	q = get2String(num); 

	printf("0x%s\n", p);
	printf("%s\n", q);
	system("pause");
	return 0;
}


代码下载及其运行

代码下载地址:http://download.csdn.net/detail/yincheng01/6704519

解压密码:c.itcast.cn


下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:

1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”


2)在下拉框中选择相应项目,项目名和博客编号一致

3)点击“本地Windows调试器”运行


程序运行结果









转载于:https://www.cnblogs.com/new0801/p/6177310.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值