Как создать генератор значений ala hex в c # - PullRequest
0 голосов
/ 21 октября 2010

Я хотел бы создать уникальный генератор значений, который бы работал следующим образом: У меня есть 8 мест для символов, и это будет создавать такие значения:

00000001 , 0000000z , 00000010 , 0000001z

и т.д.. поэтому он будет создавать значения от 00000001 до zzzzzzzz.

У меня только 8 мест, потому что это размер поля в базе данных, и я не могу его изменить.

Заранее спасибо

Ответы [ 4 ]

1 голос
/ 21 октября 2010

Вы просто хотите закодировать int в систему base 36. Это может работать примерно так (вероятно, есть несколько небольших ошибок, поскольку это код блокнота):

string IntToID(long id)
{
    string result="";
    Contract.Require(id>=0);
    while(id>0)
    {
       int digit=id%36;
       char digitChar;
       if(digit<10)
         digitChar='0'+digit;
       else
         digitChar='a'+(digit-10);
       result+=digitChar;
       id/=36;
    }
    result=result.PadLeft('0',8);
    return result;
}
1 голос
/ 21 октября 2010

Вы уверены, что не ищете GUID?

Одинаковое количество символов различной структуры: 550e8400-e29b-41d4-a716-446655440000 Вы можете создать новый GUID:

System.Guid.NewGuid().ToString(""N"")

Разделите его на каждые 8 ​​символов и добавьте точку, например:

string getUnique()
{
    char[] initial = System.Guid.NewGuid().ToString("N").ToCharArray();
    string result="";

    for(int i=0; i<initial.Count(); i++){
        result=result + initial[i];
        if((i+1)%4==0 && (i+1)!=initial.Count()){
            result = result + ".";
        }
    }
    return result;
}
1 голос
/ 21 октября 2010

как то так

public class UniqueKeyMaker
{
    private int[] keys = new int[8];

    public void Reset()
    {
        for (int i = 0; i < keys.Length; i++)
            keys[i] = 0;
    }

    public string NextKey()
    {       
        string key = getCurrentKey();
        increment();
        return key;
    }

    private void increment()
    {
        int i = 7;
        while (keys[i] == 35)
        {
            keys[i] = 0;
            i--;
        }

        keys[i]++;
    }

    private string getCurrentKey()
    {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 8; i++)
        {
            if (keys[i] < 10)
                sb.Append((char)(keys[i] + (int)'0'));
            else
                sb.Append((char)(keys[i] - 10 + (int)'a'));
        }
        return sb.ToString();
    }
}
1 голос
/ 21 октября 2010

Используйте функцию bultin random (), а затем преобразуйте свой результат в шестнадцатеричный, как только вы закончите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...