один и тот же код работает по-разному в UNICODE и в неUNICODE
От: sushko Россия  
Дата: 16.05.17 14:41
Оценка:
Сделал проект в MSVC2010 — обычный dialog box application, в него добавил код ниже. Если компилирую в UNICODE, то в ф-ции DoIt() в переменной rc4Key получаю один результат, если в MBCS — другой. Почему?

typedef struct rc4_key
{      
    unsigned char state[256];       
    unsigned char x;        
    unsigned char y;

    rc4_key()
    {
        x = 0;
        y = 0;
        ZeroMemory(state, 256);
    };
} rc4_key;


void prepare_key(unsigned char *key_data_ptr, int key_data_len, rc4_key *key)
{
    unsigned char index1;
    unsigned char index2;
    unsigned char* state;
    short counter;     
     
    state = &key->state[0];         
    for(counter = 0; counter < 256; counter++)              
        state[counter] = counter;               
    key->x = 0;     
    key->y = 0;     
    index1 = 0;     
    index2 = 0;             
    for(counter = 0; counter < 256; counter++)      
    {
        index2 = (key_data_ptr[index1] + state[counter] + index2) % 256;                
        swap_byte(&state[counter], &state[index2]);            

        index1 = (index1 + 1) % key_data_len;  
    }       
}
 
static void swap_byte(unsigned char *a, unsigned char *b)
{
    unsigned char swapByte; 
     
    swapByte = *a; 
    *a = *b;      
    *b = swapByte;
}

void DoIt()
{
    rc4_key rc4Key;
    prepare_key(btKey, 16, &rc4Key);
}
Бесплатный генератор отчетов для программ на C/C++
http://www.oxetta.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.