[英]Convert base-27 (or base-X) to base-10 in c#?
是否有現成的函數可以在 C# 中進行基本轉換? 我希望從以 26 為基數和以 27 為基數的數字轉換為以 10 為基數。我可以在紙上做到這一點,但我不是一個非常有經驗的程序員,如果可能的話,我寧願不要從頭開始。 謝謝!
有一個現成的函數可以將數字從基數 2、8 或 16 轉換為基數 10 ( Convert.ToInt32
)。 如果要將數字從以 26 或以 27 為基數轉換為以 10 為基數,則必須自己進行。
現在,我從未聽說過以 26 為基數的數字,所以我只是假設“數字”是 A 到 Z(A 的值為 0,Z 的十進制值為 25)。 要將基數 26 轉換為基數 10,您應該執行以下操作:
string charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int GetDigitValue(char digit)
{
return charset.IndexOf(digit);
}
int ConvertFromBase26(string number)
{
int result = 0;
foreach(char digit in number)
result = result * charset.Length + GetDigitValue(digit);
return result;
}
要從基數 27 轉換,只需添加代表 26 的任何字符。
注意:沒有錯誤更正(您可以轉換字符串“$#$@#$@”,這將為您提供一個很好的負數),並且 GetDigitValue 效率相當低,如果您打算這樣做,應該用查找表替換這些轉換很多。
編輯:一個 LINQ 版本,只是為了好玩。
同樣,假設字符串僅包含合法數字,則沒有有效的查找和糾錯。
string charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int ConvertFromBase(string charset, string number)
{
return number.Select(c=>charset.IndexOf(c)).Aggregate(0, (x, y) => x*charset.Length +y);
}
不過,我認為第一個版本更具可讀性。
建立在你的答案之上。 您不需要字符集查找列表,因為您可以只使用字符 ASCII 值。
int ConvertFromBase26(string number)
{
return number.Select(digit => (int)digit - 64).Aggregate(0, (x, y) => x * 26 + y);
}
在使用 Excel 編程時,我使用它來將列字符串地址轉換為 int in。
假設您使用基於 26 的字母表(例如:A = 1, B = 2, ... , Z= 26, AA = 27, ...)
public int ToBase10(this string str)
{
str = str.ToUpper();
int number = 0;
for (int index = 0; index < str.Length; index++)
number += (str[index] - 'A' + 1) * (int)Math.Pow(26, str.Length - 1 - index);
return number;
}
要調用此函數,只需像這樣調用
string PlateNumber = "TRX";
int number = PlateNumber.ToBase10();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.