int character_value(char character)
{
    const char alphabet[128] = {'@', '@', '$', '@', '@', '@', '@', '@', '@', '@', '\n', '@', '@',
          '\r','@', '@','@', '_', '@', '@', '@', '@', '@','@', '@', '@', '@','@', '@', '@', '@',
          '@',' ', '!', '"', '#', '@', '%', '&', '\'', '(', ')','*', '+', ',', '-', '.', '/',
          '0', '1', '2', '3', '4', '5', '6', '7','8', '9', ':', ';', '<', '=', '>', '?', '@',
          'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q',
          'R', 'S','T', 'U', 'V', 'W', 'X', 'Y', 'Z', '@', '@', '@', '@', '@', '@', 'a','b',
          'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o','p', 'q', 'r', 's',
          't', 'u', 'v', 'w', 'x', 'y', 'z', '@', '@', '@','@', '@'};
    int i;

    for(i=0;i<128;i++){
        if(character == alphabet[i]){
            return i;
        }
    }
    return -1;                              //no valid character
}

int bin2int(char * binary)
{
    int i;
    int sum = 0;
    int length;

    length = strlen(binary);
    for(i=0;i<length;i++){
        if(binary[i] == '1'){
            //sum += (int)pow((double)2,(double)(length-1-i));
            sum += 0x01<<(length-1-i);
        }
    }
    return sum;
}

void process_message(char * message_str, char * message)
{
    char buffer[8]="\0";
    int length;
    int i;
    int character = -1;
    char base[8]="\0";
    char carry[8]="\0";
    char rdbuffer[8]="\0";

    //init
    message_str[0] = '\0';

    length = strlen(message);
    if(length<=15){
        strcat(message_str, "00000");
    } else {
        if(length>160){
            length = 160;
        }
        strcat(message_str, "0000");
    }
    itoa(length, buffer, 16);   //convert integer to hex string
    strcat(message_str, buffer);

    for(i=0;i<=length;i++){
        if(i == length){
            if(base[0] != '\0'){
                character = bin2int(base);
                itoa(character, base, 16);
                if(strlen(base)==1){
                    base[1]=base[0];
                    base[0]='0';
                    base[2]='\0';
                }
                strcat(message_str, base);
            }
            break;
        }
        character = character_value(message[i]);
        if(character != -1){
            strcpy(buffer,"0000000");
            itoa(character, rdbuffer, 2);
            strcpy(buffer+7-strlen(rdbuffer), rdbuffer);
            if(i != 0 && i%8 !=0){
                strncpy(carry, buffer+7-i%8, i%8);
                carry[i%8] = '\0';
                strcat(carry, base);
                character = bin2int(carry);
                itoa(character, carry, 16);
                if(strlen(carry)==1){
                    carry[1]=carry[0];
                    carry[0]='0';
                    carry[2]='\0';
                }
                strcat(message_str, carry);
                strncpy(base, buffer, 7-i%8);
                base[7-i%8] = '\0';
            } else{
                strcpy(base, buffer);
            }
        } else{
            //ERROR: Not a valid character
        }
    }
}
!!! Dieses Dokument stammt aus dem ETH Web-Archiv und wird nicht mehr gepflegt !!!
!!! This document is stored in the ETH Web archive and is no longer maintained !!!