将一个正整数用十六进制和二进制的字符串输出 -- C语言

思路

base 是要转换的基树, n % base 拿到的数就是改进制的最低位,缓存起来;然后通过 n / base 来处理下一位并存入缓存;别忘了在最后加上'\0',缓存中的数字和原来是相反的,所以需要反转过来后复制到结果中,但是注意,复制的长度是 len + 1,因为要复制 '\0'

代码实现

static char hexMetric[16] = { \
	'0', '1', '2', '3', \
	'4', '5', '6', '7', \
	'8', '9', 'A', 'B', \
	'C', 'D', 'E', 'F', \
};

int int2HexStr(char * str, int num){

	if(NULL == str){
		printf("int2HexStr param error\n");
		return PARAM_ERR;
	}

	int base = 16;
	int len  = 0, n = 0, a = 0, k = 0;
	char buf[100] = {'0'};

	n = num;
	do {
		a = n % base;
		n = n / base;
		buf[len++] = hexMetric[a];
	} while(n != 0);
	buf[len] = '\0';

	strReversWithWord(buf);

	str[0] = '0';
	str[1] = 'x';
	str = str + 2;

	memcpy(str, buf, len);
		
	return SUCCESS;

}


static char binMetric[16] = { \
	'0', '1' \
};

int int2BinStr(char * str, int num){
	if(NULL == str){
		printf("int2BinStr param error\n");
		return PARAM_ERR;
	}

	int base = 2;
	int len  = 0, n = 0, a = 0, k = 0;
	char buf[100] = {'0'};

	n = num;
	do {
		a = n % base;
		n = n >> 1;
		buf[len++] = binMetric[a];
	} while(n != 0);
	buf[len] = '\0';

	strReversWithWord(buf);

	str[0] = '0';
	str[1] = 'b';
	str = str + 2;

	memcpy(str, buf, len);
	return SUCCESS;
}


void testConvertNum2Str(void){
	char str[100] = {'0'};
	int num = 456789;

	printf("\n************  testConvertNum2Str ************ \n");

	int2HexStr(str,num);
	printf("The hex str is %s\n", str);

	int2BinStr(str,num);
	printf("The bin str is %s\n", str);

	return;
}

代码编译

gcc main.c str.c -g -o a.exe

调试输出

************  testConvertNum2Str ************
The hex str is 0x6F855
The bin str is 0b1101111100001010101

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值