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

Тема в разделе "C/C++/C#", создана пользователем Security, 10 апр 2012.

  1. Security

    Security New Member

    Регистрация:
    17 апр 2010
    Сообщения:
    1
    Симпатии:
    0
    Есть функция преобразования строки символов из 7bit в 8bit.
    Код (C++):
    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!

    Код (C++):
    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;
    }
    }
     
Загрузка...

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