【发布时间】:2018-10-09 10:34:44
【问题描述】:
基本上,我在这里有这个函数,当输入一个十进制值时,它会吐出一个十六进制值。这段代码工作得很好,但是当我将它逐字插入我正在处理的一组更大的代码中时,吐出的十六进制数字有 8 个额外的不必要的字符,后面跟着正确的十六进制值。关于如何解决它的任何想法?我被告知要终止十六进制字符串,但是我在哪里准确地做到这一点以及如何做到这一点?
#include <stdio.h>
#include <string.h>
int main(void){
int decimalnum, quotient, remainder;
int k, l = 0;
char hexadecimalnum[100];
char str[50];
int m;
char temp;
int j;
printf("enter decimal number: ");
scanf("%d", &decimalnum);
quotient = decimalnum;
while (quotient != 0) {
remainder = quotient % 16;
if(remainder < 10) {
hexadecimalnum[l++] = 48 + remainder;
}
else {
hexadecimalnum[l++] = 55 + remainder;
}
quotient = quotient / 16;
}
// Display integer to character.
for(k = l; k >= 0; k--) {
str[k] = hexadecimalnum[k];
}
m = 0;
j = l-1;
// Flip the string because it is written backwards.
while(m <j) {
temp = str[m];
str[m] = str[j];
str[j] = temp;
m++;
j--;
}
printf("\n%s\n", str);
return 0;
【问题讨论】:
-
你在哪里终止字符串?您在字符串末尾添加了
\0。 -
您忘记了
char字符串实际上称为 null-terminated 字节字符串。 null-terminated 位很重要。 -
另外,请不要使用magic numbers。如果通过例如
55你的意思是 ASCII 字符'7'然后 say 所以。另请注意,除了 C 规范没有强制要求的 ASCII 以外,不能保证您转换为字母。
标签: c