none
Из byte в uint32 RRS feed

  • Вопрос

  •   В следующем куске кода нужно четыре эл. массива byte
    
     запихнуть по очереди(то есть не сложить а именно 
    расположить по очереди в одном uint32) я знаю что он не совсем красивый, но речь не в этом! Просто мне
    не нравится результат! Подскажите, пожалуйста, правильно я делаю? А вообще это из алгоритма RC6, где я ключ
    перевожу из массива байт в слова по 4байта(32бита), так что если кто подскажет его реализация на C# буду
    очень благодарен:
    byte [] key = new byte [64]; char [] arr; arr = textBox1.Text.ToCharArray(); Encoder e = Encoding.Unicode.GetEncoder(); e.GetBytes(arr,0, arr.Length, key,0,true ); //---начало---разбиение на слова UInt32[] L = new UInt32[16]; int bb=0; for (int i=0;i<16;i++) { L[i]=key[bb]; L[i]=l_shift(L[i],8); ++bb; L[i]=L[i] | key[bb]; L[i]=l_shift(L[i],8); ++bb; L[i]=L[i] | key[bb]; L[i]=l_shift(L[i],8); ++bb; L[i]=L[i] | key[bb]; L[i]=l_shift(L[i],8); }
    static UInt32 l_shift(UInt32 number, int shift)
    {
    UInt32 temp_a = number >> (32 - shift);
    UInt32 temp_b = number << shift;
    return temp_a | temp_b;

    }

    • Перемещено Siddharth Chavan 1 октября 2010 г. 22:43 MSDN Forums Consolidation (От:Visual C#)
    9 января 2010 г. 19:39

Ответы

Все ответы

  • private UInt32 GetUInt32(Byte[] arr)
    {
        UInt32 L = 0;
        //начиная со старших
        for (Int32 i = 3; i >= 0; i--)
        {
            L += arr[i];
            if (i > 0) L = L << 8;
        }
        return L;
    }

    Пример:
    arr={1,2,3,4};
    L=67305985; т.е. 00000100 00000011 00000010 00000001 (4,3,2,1).

    • Помечено в качестве ответа Sm1le291 9 января 2010 г. 21:18
    • Снята пометка об ответе Sm1le291 10 января 2010 г. 8:20
    9 января 2010 г. 20:19
  • Спасибо, а то я чё-то совсем намутил...)))
    9 января 2010 г. 21:19
  • Но чё то всё-равно не работает проблема не в этом, кому интересно проект в VS2010:
    http://www.easyload.ru/download/?25421
    9 января 2010 г. 22:09
  • Почему бы не использовать BitConverter.ToUInt32() ?
    This posting is provided "AS IS" with no warranties, and confers no rights.
    • Помечено в качестве ответа Sm1le291 10 января 2010 г. 8:20
    10 января 2010 г. 5:01
    Модератор
  • Ну а теперь собственно обратный вопрос, я зашифровал всё и теперь мне нужно записать из массива Uint32 в файл, методом Write, объекта FileStream. Но он позволяет записывать только из byte. Можно ли как-нибудь записать в двоичном потоке из UInt32 в файл или как преобразовать обратно из UInt32 в byte?
    10 января 2010 г. 12:37
  • fs.Write(BitConverter.GetBytes(L), 0, 4);

    • Помечено в качестве ответа Sm1le291 10 января 2010 г. 12:53
    10 января 2010 г. 12:45
  • Другой вариант - использовать StreamWriter класс.
    This posting is provided "AS IS" with no warranties, and confers no rights.
    10 января 2010 г. 17:13
    Модератор