簡體   English   中英

從不使用 .GetHashCode() 的唯一字符串生成短整數

[英]Generate A Short Integer From A Unique String Without .GetHashCode()

當給定唯一字符串時,我想生成一個短整數。 請注意,字符串的長度永遠不會超過 3 個字符,只有字母字符,可以是大寫或小寫。 例如, AB不應返回與BA相同的值。 我嘗試了類似以下(如下)的方法,只是遇到BA等於AK

public static class StringExtensions
{
    public static int StringToASCIIValue(this string str)
    {
        if (string.IsNullOrWhiteSpace(str)) 
            throw new ArgumentException("string must not be null or whitespace");

        int result = 0;
        foreach (char singleChar in str)
        {
            result = 10 * result + singleChar - '0';
        }
        return result;
    }
}

這是實現此目的的簡單方法。 沒有兩個結果是相同的。 我們獲取字符串,然后對於其中的每個字符,我們將 ascii 值附加到字符串構建器。 完成后,我們可以為該字符組合輸出一個唯一的整數。

string first = "AB";
StringBuilder stringBuilder = new StringBuilder();

foreach(char c in first)
{
     stringBuilder.Append((int)c);
}

Console.WriteLine(stringBuilder.ToString());

輸出

6566

如果您真的確定您不會看到超過 3 個字母( AZaz )字符,您應該能夠獲取ASCII編碼的字節並將它們直接轉換為int

public static class StringExtensions
{
    public static int ToInt32(this string str)
    {
        // Checks for null omitted.
        var ascii = System.Text.Encoding.ASCII.GetBytes(str);
        int result = 0;
        for (int i = 0; i < ascii.Length; i++)
        {
            result = result | (ascii[i] << (i * 8));
        }
        return result;
    }
}

如果重要,您可以將該int帶回生成它的string

public static class StringExtensions
{   
    public static string AsciiIntBackToString(this int value)
    {
        var bytes = BitConverter
            .GetBytes(value)
            .Where(b => b > 0)
            .ToArray();
        return System.Text.Encoding.ASCII.GetString(bytes);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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