Обращение к элементу массива(на с++)

Тема в разделе "WASM.ZEN", создана пользователем iron_nomad, 9 июн 2005.

  1. iron_nomad

    iron_nomad New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    30
    мне не нравится след.код:
    Код (Text):
    1.     union
    2.         {
    3.             char    b_yte[4];
    4.             int     d_word;
    5.         } byte_last;
    6.  
    7.         //char byte_last = right.b_yte[3];
    8.         byte_last.d_word = 0;
    9.         byte_last.b_yte[0] = 0x96;
    10.         char byte_replace = SBoxExt.Double[i][byte_last.d_word]
    но подругому мой код не катит.

    А не нравится то что при обращении в последней строчке я обязан обращаться с помощью array[int][int] а хотелось бы [int][char], но , если вы посмотрите исходник в аттаче мои попытки не увенчились успехом
     
  2. iron_nomad

    iron_nomad New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    30
    Я хочу выбрать из таблицы замен байт, который будет указывать на байт в таблице замен и поэтому место я возму новое значение и заменю его прежним байтом числа
     
  3. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    char byte_replace = SBoxExt.Double[(int)b_yte]
     
  4. iron_nomad

    iron_nomad New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    30
  5. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Код (Text):
    1.  
    2. typedef unsigned char   byte;
    3. typedef unsigned long   u32;
    4.  
    5.  
    6. u32 inline get( const byte array[4] )
    7. {
    8. #if (('1234' >> 24) == '1')     // little endian ?
    9.     return  *(u32 *)(array);
    10. #else
    11.     return  array[0] <<  0
    12.           | array[1] <<  8
    13.           | array[2] << 16
    14.           | array[3] << 24;
    15. #endif
    16. }
    17.  
    18.  
    19. void inline put( u32 value, byte array[4] )
    20. {
    21. #if (('1234' >> 24) == '1')     // little endian ?
    22.     *(u32 *)(array) = value;
    23. #else
    24.     array[0] = value >>  0 & 0xFF;
    25.     array[1] = value >>  8 & 0xFF;
    26.     array[2] = value >> 16 & 0xFF;
    27.     array[3] = value >> 24       ;
    28. #endif
    29. }
    30.  
    31.  
    32. u32 inline rot_left_8( u32 value )
    33. {
    34. #ifdef  _M_IX86
    35.     return  _rotl(value, 8);                // MSVC и Intel C++ делают ROL
    36. #else
    37.     return  value >> 24 | value << 8;
    38. #endif
    39. }
    ЗЫ: что-то классы черезчур активно используются там, где можно и без них.