尝试将基数为10的数字转换为基数为16的数字:
public string Test03(IEnumerable<string> str1)
{
// call with two parameters and return them back
list = str1;
return list.FirstOrDefault().ToString();
}
无论出于何种原因,这段代码对我不起作用......任何想法?我试图用A,B,C替换10,11,12,......但是它似乎并没有起作用。我尝试使用if else语句,但是当我运行代码时它会崩溃。
答案 0 :(得分:2)
在您的原始代码中,您没有更新num
,看起来您误解了%
的工作原理,%
是模数而非分割。
如果你不确定基地之间的转换是如何工作的,你可以查看this或只看谷歌,有很多关于算法的视频和网站。
<强>的JavaScript 强>
var number = 123456; //The input value
var hexCharacters = ["A", "B", "C", "D", "E", "F"]; //Digits for 10-15, eliminates having case statements
var hexString = "";
while (number > 0) {
var mod = number % 16; //Get the remainder
number = Math.floor(number / 16); //Update number
//Prepend the corresponding digit
if (mod > 9) {
hexString = hexCharacters[mod - 10] + hexString; //Get the digits for 10-15 from the array
} else {
hexString = mod.toString() + hexString;
}
}
<强> Fiddle 强>
答案 1 :(得分:1)
在行hex=(num%16)
num = Math.floor(num / 16);
你的逻辑是正确的,你只是忘了(或者不知道%没有)将num
除以16。
请看这一行(代码中的第5行):
hex = (num % 16); //divides num by 16
当num除以16时得到余数,并将其存储为十六进制。到目前为止这是正确的,因为你需要知道这个值是什么。
但是,在您的评论中,您会注意到行"divides num by 16"
。这 不 非常正确。它只会得到余下的 , 如果 它被除以16。你仍然必须这样做划分自己。
可以用这一行完成:
num = Math.floor(num / 16);
在你的while循环中。当然,您仍然需要行hex=(num%16);
。我建议您在第一行hex=(num%16);
之后添加新行,因此其目的很明确。
您编辑的代码可以像这样循环:
var hex = []; // array for hexadecimals
while (num > 0) { // if num greater than 0 loop will run
hex = (num % 16); // Gets remainder when num is divided by 16
num = Math.floor(num / 16) // Actually divides num by 16
if (hex > 9) {
.
.
.
我建议 amura.cxg 的答案,因为 amura.cxg 显示了一种非常好的方法来重新格式化代码,以便它编写得很好,清晰,简洁。
我只发布了我的回答,以便我可以准确地向您显示错误代码的位置,因为我认为这些信息对您非常有帮助。