【发布时间】:2013-10-28 16:21:50
【问题描述】:
我的代码中出现分段错误时遇到了麻烦。我正在尝试制作一个将十进制数转换为十六进制数的函数。 另外,如果我要使用:15&15,数字是 1111 还是 15?
这是我的代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *to_hex(int n);
main(){
int dec;
printf("-> ");
scanf("%d",dec);
printf(to_hex(dec));
}
char *to_hex(int n){
char *array = malloc(sizeof(int)*2+8);/*makes array*/
int i;
int index=0;/*used for storing into array*/
for(i=28;i>-1;i=i-4){/*mask and compare 8 times*/
int shift=n>>i;/*right shift*/
int mask=shift&15;/*masks*/
if (mask<10){
*(array+index)=(char)mask;
index++;
}
else{
switch(mask){
case 10:
*(array+index)='a';
index++;
break;
case 11:
*(array+index)='b';
index++;
break;
case 12:
*(array+index)='c';
index++;
break;
case 13:
*(array+index)='d';
index++;
break;
case 14:
*(array+index)='e';
index++;
break;
case 15:
*(array+index)='f';
index++;
break;
}
}
}
*(array+index)='\0';
return array;
}
我认为 : int mask : 会等于 15 而不是 1111 我正确吗?谢谢
【问题讨论】:
-
*(array+index)='a'; index++;相当array[index++] = 'a';(使用空格和 C 习语...) -
15&15 would the number be 1111 or 15?- 二进制 1111,十进制 15...我不明白您对所有这些转换的问题是什么。此外,如果mask小于 10,则字符错误。代码为 0 的字符不是字符'0'。为此,您需要mask + '0'。 -
您可以将
printf(to_hex(dec));替换为printf("%x",dec); -
我刚开始学习 C 语言,所以我不太清楚 c 习语是什么意思,但我正在尝试学习指针而不是使用“array[]”。我对分段错误的位置有点困惑。我也忘了在 else 语句之后输入代码 n=n
-
我不确定你所说的代码 0 是什么意思。你的意思是当我将整数转换为字符时?
标签: c hex decimal shift bitmask