【发布时间】:2016-04-07 01:34:03
【问题描述】:
我偶然发现了这个方法,它应该从 10 基数转换为 radix 基数,所以例如,如果我通过 28, 16 它应该返回 1c是十进制28的十六进制表示
private static string convertTo(long value, int radix)
{
char[] alphabet = "0123456789abcdefghijklmnopqrstuv".ToCharArray();
string result = "";
if (value < radix) {
return alphabet[value].ToString();
}
long index;
while (value != 0)
{
index = value % radix;
value = Convert.ToInt64(Math.Floor(value / radix));
result += alphabet[index].ToString();
}
return result;
}
我正在用 PHP 重写程序的那部分。通过阅读上面的代码,并手动预测输出,它返回 c1,它应该为 28、16 返回 1c em>
我的发现是此方法返回给定基数中字符串的反向表示,c1 而不是正确的 1c
因为我没有 C# 编译器,所以无法验证我的发现。
所以这是我的两个问题:
- 上面用 28, 16 调用的方法返回 c1 我的计算是否正确?
- 我想符号(数字/字母),在任何基数中,都被写成使得基数指数减少 1随着我们从左往右写,例如在 十进制 em> 表示 312 表示 300
(3 * 10 ^ 2)+ 10(1 * 10 ^ 1)+ 2(2 * 10 ^ 0).. 绝对 总是正确吗?李>
【问题讨论】:
-
@GeraldSchneider 正确,这是一个翻转的 c1 (我相信这是上述方法的返回)。如果这一切都正确,我最终会使用 strrev( base_convert( 28, 10, 16 ) ) 来实现该效果。但我不确定我的发现,这就是问题:)
-
有多种免费的 C# 编译器可用,包括 Visual Studio Community。是什么阻止你测试它?
-
@Jeff 我没有 Windows,我无法使用 VS。如果没有 VS,我将不得不将这个函数包装在一个类中来测试它,但我没有 C# 的技能。
-
您可以在这里编译和测试C#代码:csharppad.com
-
Linux下也可以使用mono。
标签: c# base base-conversion