我试图从base15(编辑)字符串中获取原始的12位值。我想我需要像Java一样的zerofill右移操作符来处理零填充。我该怎么做?
到目前为止,使用以下代码没有运气:
static string chars = "0123456789ABCDEFGHIJKLMNOP";
static int FromStr(string s)
{
int n = (chars.IndexOf(s[0]) << 4) +
(chars.IndexOf(s[1]) << 4) +
(chars.IndexOf(s[2]));
return n;
}
编辑;我将发布完整代码以完成上下文
static string chars = "0123456789ABCDEFGHIJKLMNOP";
static void Main()
{
int n = FromStr(ToStr(182));
Console.WriteLine(n);
Console.ReadLine();
}
static string ToStr(int n)
{
if (n <= 4095)
{
char[] cx = new char[3];
cx[0] = chars[n >> 8];
cx[1] = chars[(n >> 4) & 25];
cx[2] = chars[n & 25];
return new string(cx);
}
return string.Empty;
}
static int FromStr(string s)
{
int n = (chars.IndexOf(s[0]) << 8) +
(chars.IndexOf(s[1]) << 4) +
(chars.IndexOf(s[2]));
return n;
}
答案 0 :(得分:0)
你的表示是base26,所以你要从三个字符的值得到的答案不会是12位:它将在0..17575的范围内,包括15位。
回想一下,左移k
位与乘以2^k
相同。因此,您的x << 4
运算相当于乘以16.还要记住,当您转换基数为X的数字时,需要将其数字乘以X的幂,因此您的代码应该乘以26,而不是而不是改变左边的数字,如下:
int n = (chars.IndexOf(s[0]) * 26*26) +
(chars.IndexOf(s[1]) * 26) +
(chars.IndexOf(s[2]));