【发布时间】:2019-04-26 00:51:45
【问题描述】:
我目前正在开发一个程序,该程序(除其他外)必须将十进制数转换为二进制、八进制和十六进制。 这已经适用于此代码:
int e = 0;
}
while(i != 0){
str[e] = (i%b) + '0';
i = i / b;
if(str[e] > '9'){
str[e] = str[e] + 7;
}
e++;
}
if(vorzeichen == -1){
str[e] = '1';
e++;
}
if(b == 16){
str[e] = 'x';
str[e+1] = '0';
}
else if(b == 8){
str[e] = '0';
}
}
b 是基数(二进制为 2,八进制为 8,六进制为 16),i 是我要转换的数字。 这给出了一串字符,然后我将其反转以获得正确的数字。现在,如果我用负数尝试这个,它不仅会给出包含 0 和 1 的字符串,还会给出 /,即 ASCII 表上的 '0' -1。对于八进制和十进制,它还会给出 ASCII 表中“/”下方的字符。我尝试了不同的可能解决方案,但似乎都没有给出预期的结果。我在互联网上看到的是我必须使用 2s Complement 我一直在尝试使用它。它似乎对我不起作用。
【问题讨论】:
-
snprintf(str, size_of_str, "%o", integer_value)?将"%o"替换为"%x"以表示十六进制。对于二进制,我建议使用移位和 AND 等按位运算。 -
我不能使用库函数
-
那我建议你花点时间learn how to debug your code。
-
在这种情况下,我建议先在 paper 上编写算法,然后看看它在不同输入下的表现如何。一旦你有了可靠的东西,就很容易用代码编写它。花点时间学习。