мне не нравится след.код: Код (Text): union { char b_yte[4]; int d_word; } byte_last; //char byte_last = right.b_yte[3]; byte_last.d_word = 0; byte_last.b_yte[0] = 0x96; char byte_replace = SBoxExt.Double[i][byte_last.d_word] но подругому мой код не катит. А не нравится то что при обращении в последней строчке я обязан обращаться с помощью array[int][int] а хотелось бы [int][char], но , если вы посмотрите исходник в аттаче мои попытки не увенчились успехом
Я хочу выбрать из таблицы замен байт, который будет указывать на байт в таблице замен и поэтому место я возму новое значение и заменю его прежним байтом числа
Код (Text): typedef unsigned char byte; typedef unsigned long u32; u32 inline get( const byte array[4] ) { #if (('1234' >> 24) == '1') // little endian ? return *(u32 *)(array); #else return array[0] << 0 | array[1] << 8 | array[2] << 16 | array[3] << 24; #endif } void inline put( u32 value, byte array[4] ) { #if (('1234' >> 24) == '1') // little endian ? *(u32 *)(array) = value; #else array[0] = value >> 0 & 0xFF; array[1] = value >> 8 & 0xFF; array[2] = value >> 16 & 0xFF; array[3] = value >> 24 ; #endif } u32 inline rot_left_8( u32 value ) { #ifdef _M_IX86 return _rotl(value, 8); // MSVC и Intel C++ делают ROL #else return value >> 24 | value << 8; #endif } ЗЫ: что-то классы черезчур активно используются там, где можно и без них.