1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

Алгоритм Преобразования 8bit В 7bit

Тема в разделе "Вопросы новичков и не только", создана пользователем Security, 10 апр 2012.

  1. Security

    Security New Member

    Репутация:
    0
    Регистрация:
    17 апр 2010
    Сообщения:
    1
    Симпатии:
    0
    Есть функция преобразования строки символов из 7bit в 8bit.
    Код:
    str = "Hello!"; 
    AnsiString String7To8(AnsiString str) 
    { 
    AnsiString result = ""; 
    char input[128]; 
    char decode[128]; 
    int len; 
    
    sprintf(input,"%s",str.c_str()); 
    
    unsigned char c, w; 
    int n, m, shift, x; 
    len = strlen(input); 
    shift = 0; decode[0] = 0; 
    
    
    /* Decode into 7 bit characters */ 
    for(n=0; n<len; ++n) 
    { 
    c = input[n] & 0x7f; 
    c >>= shift; 
    w = input[n+1] & 0x7f; 
    w <<= (7-shift); 
    shift +=1; 
    c = c | w; 
    if(shift == 7) 
    { 
    shift = 0x00; 
    n++; 
    } 
    x = strlen(decode); 
    decode[x] = c; 
    decode[x+1] = 0; 
    } 
    // Display decoded output as Hex 
    for(unsigned int i = 0; i < strlen(decode); i++) 
    { 
    sprintf(msg,"%.02X",(unsigned char)decode[i]); 
    result += AnsiString(msg); 
    } 
    return result.Trim(); 
    }
    В итоге получаем C8329BFD0E01

    Пробовал переделать данную функцию для обратного преобразования, но что-то не работает. На выходе должно получиться Hello!

    Код:
    str = "C8329BFD0E01"; 
    /* Decode into 8 bit characters */ 
    AnsiString String8To7(AnsiString str) 
    { 
    AnsiString result = ""; 
    char input[128]; 
    char msg[128]; 
    char decode[128]; 
    int len; 
    
    sprintf(input,"%s",str.c_str()); 
    
    unsigned char c, w; 
    int n, m, shift, x; 
    len = strlen(input); 
    shift = 0; decode[0] = 0; 
    
    for(n=0; n<len; ++n, ++m) 
    { 
    c = input[n]<<shift; 
    c = c & 0x7f; 
    if(n > 0) 
    { 
    w = input[n - 1]>>(7-shift); 
    msg[m] = c | w; 
    } 
    shift+=1; 
    if(shift > 6) 
    { 
    shift = 0; 
    n++; 
    } 
    x = strlen(decode); 
    decode[x] = c; 
    decode[x+1] = 0; 
    } 
    }
     
Загрузка...

Поделиться этой страницей