2014-02-03 3 views
1

У меня есть целочисленное значение. Я хочу преобразовать его в значение Base 64. Я попробовал следующий код.Преобразование целочисленного значения в значение Base 64

byte[] b = BitConverter.GetBytes(123); 
string str = Convert.ToBase64String(b); 
Console.WriteLine(str); 

Его дает из положить в "ewAAAA==" с 8 символов. преобразовать то же самое значение, основание 16 следующим образом

int decvalue = 123; 
string hex = decvalue.ToString("X"); 
Console.WriteLine(hex); 

из положить предыдущий код 7В Если мы делаем это в математике прибывает такое же. Как он отличается? Как я могу получить такое же значение для Base 64. (Я нашел вышеуказанное преобразование базы 64 в Интернете)

+2

Основание 64 и шестнадцатеричное (основание 16) представляют собой разные изображения. Почему вы ожидали того же выхода? – Henrik

+0

Например, если мы преобразуем «10» в базу в шестнадцатеричную цифру «А». если мы используем базу 64 (по математике) ее «10». Я хочу, чтобы это произошло. – udaya726

+1

@ udaya726 да, это база-64 ** арифметика **; 'Convert' является кодировкой base-64 ** ** - очень отличается –

ответ

1

Вопрос довольно неясен ... «Как он отличается?» - ну, по-разному:

  • одна база-16, а другой является базой-64 (следовательно, они существенно отличаются все равно)
  • один делает арифметическое представление; один формат сериализация байт - очень разные
  • один использует мало-младший арифметик (предполагается, что стандартный центральный процессор), а другие используют тупоконечник арифметику

Чтобы получить сравнимую базового 64 результата , вам, вероятно, нужно будет закодировать его вручную (поскольку Convert поддерживает только base-8, base-10, base-16 для арифметических преобразований). Возможно (примечание: не оптимизировано):

static void Main() 
{ 
    string b64 = ConvertToBase64Arithmetic(123); 

} 


// uint because I don't care to worry about sign 
static string ConvertToBase64Arithmetic(uint i) 
{ 
    const string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/"; 
    StringBuilder sb = new StringBuilder(); 

    do 
    { 
     sb.Insert(0, alphabet[(int)(i % 64)]); 
     i = i/64; 
    } while (i != 0); 
    return sb.ToString(); 
} 
Смежные вопросы