连接三个 4 位值
本文关键字:三个 位值 连接 | 更新日期: 2023-09-27 18:35:13
我正在尝试从base15(编辑)字符串中获取原始的12位值。我想我需要像 Java 中那样的零填充右移运算符来处理零填充。我该怎么做?
到目前为止,以下代码没有运气:
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;
}
您的表示形式是 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]));