我将这个任意长度的基本转换函数从这个答案改编为C#:
static string BaseConvert(string number, int fromBase, int toBase)
{
var digits = "0123456789abcdefghijklmnopqrstuvwxyz";
var length = number.Length;
var result = string.Empty;
var nibbles = number.Select(c => digits.IndexOf(c)).ToList();
int newlen;
do {
var value = 0;
newlen = 0;
for (var i = 0; i < length; ++i) {
value = value * fromBase + nibbles[i];
if (value >= toBase) {
if (newlen == nibbles.Count) {
nibbles.Add(0);
}
nibbles[newlen++] = value / toBase;
value %= toBase;
}
else if (newlen > 0) {
if (newlen == nibbles.Count) {
nibbles.Add(0);
}
nibbles[newlen++] = 0;
}
}
length = newlen;
result = digits[value] + result; //
}
while (newlen != 0);
return result;
}
Run Code Online (Sandbox Code Playgroud)
由于它来自PHP,它可能不是太惯用的C#,也没有参数有效性检查.但是,您可以为它提供一个十六进制编码的字符串,它可以正常工作
var result = BaseConvert(hexEncoded, 16, 36);
Run Code Online (Sandbox Code Playgroud)
它并不完全是你要求的,但将byte[]十六进制编码是微不足道的.