簡體   English   中英

在c#中將base-27(或base-X)轉換為base-10?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM