1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Help! Programare in C

Discussion in 'Ajutor: Software și sisteme de operare' started by Marius '95, Jun 16, 2014.

  1. Marius '95

    Marius '95 Membru Senior

    Am nevoie de un pic de ajutor in descifrarea unei imagini comprimate.
    Sirul de mai jos, dupa decomprimare ar trebui sa fie o imagine 128x128 alb-negru (1bit/pixel), deci 128x128=16384 pixeli a cate 1 bit, /8 biti = 2048 Bytes.
    Eu am scris functia mea proprie in PHP, dar dintr-un motiv care imi scapa, marimea rezultatului variaza de la caz la caz in loc sa fie fix 2 KB.

    Asadar, se da urmatorul sir ca exemplu:
    Code:
    Z4f;21;Z2;1;Zb;4;Z3e;10;Z30;8;1;Z2f;1;Z19;4;Z5;1;Z1f;1;Z27;80;40;Z11;80;Z4;1;Z19;40;Z5;1;Zf;1;Z6;20;Z2;1;20;Z14;1;Z14;2;Z3;8;Z6;1;Z8;80;Zd;20;Zf;4;Z8;1;Zf;1;Z9;80;0;2;Z9;1;0;80;10;Z6;1;Zc;20;0;80;Z9;4;0;8;Z3;10;Zd;8;Z10;4;Zf;c;0;1;Z4;10;Z8;3;
    ;c8;Z7;4;Z4;10;40;10;0;1;Z4;2;Z8;94;Z6;2;Z2;1;Z2;8;20;Z2;80;81;Z4;4;Z7;80;12;0;81;Z4;2;Z4;1;Z2;40;34;80;1;Z7;22;Z3;21;23;41;cc;Z8;4;Z3;90;84;62;88;1;Za;40;a;3;21;0;1;Z6;80;Z4;9;4;15;40;Z8;40;Z2;c;22;f2;3f;18;2;Z4;2;Z4;8;b;ab;d6;32;dc;Z7;2;80;
    ;0;2;10;26;68;2c;24;Z6;22;Z4;1;95;5a;32;82;1;Z6;8;a0;0;2;21;1d;e5;b8;65;Z6;8;Z2;10;18;8d;8e;fe;58;a8;41;Za;1d;69;U1;8e;c0;80;Z5;20;Z4;f;fd;U1;de;c4;Za;10;2f;7f;af;U1;b0;Za;83;9d;ef;fe;ca;90;Z5;20;1;Z3;e;2f;df;7f;f6;40;1;Z3;8;20;0;10;Z2;a;7f;f7;
    ;U1;ef;a0;Z6;10;Z2;20;26;fa;U2;bf;10;1;Z3;20;Z5;3;U1;df;U1;dd;e0;Z5;4;Z3;1;76;f9;U2;ef;88;Z4;2;Z5;1e;b7;U2;fd;Z6;5;20;0;1;0;53;7f;fe;U1;d5;8;Z5;1;8;Z2;40;49;U3;f5;6a;Za;3f;U3;e4;90;Z5;80;Z4;6f;U3;fc;70;Z6;c;Z2;4;5f;U3;fb;28;Z4;1;4;Z4;7b;U3;ed;
    ;Z6;40;Z4;a7;U3;db;80;Z5;10;Z3;1;2b;U2;f6;dd;80;Z4;13;0;2;Z2;b;77;U2;ef;a8;Z5;22;Z2;10;2;d;7b;U2;f9;b4;80;Z4;1;0;12;40;8;11;bf;U2;bf;28;Z5;80;80;3;0;80;c4;7f;U2;fd;c0;Z4;30;40;Z2;1;2;49;7f;U3;a2;Z4;1;Z4;1;27;7f;fd;U1;f7;Z5;a;81;20;29;0;2;b;7f;
    ;U1;df;bf;98;Z7;80;0;10;a9;6f;U2;8a;Z5;3;0;40;Z2;80;5f;7f;U2;b0;Z5;2;0;4;0;14;40;86;U2;f6;e8;80;Z5;10;Z2;2;0;56;7f;fd;d9;60;Z8;16;8;6;82;f7;fe;be;88;Z5;4;10;4;0;55;2;4f;fd;U1;26;Z6;8;e0;0;83;4;10;15;U1;d6;fc;36;Z5;9;98;0;8;a8;10;2e;b1;5f;fc;4;
    ;0;2;Z3;4;40;0;1;62;40;c9;9c;69;50;0;8;Z4;8;41;84;Z2;40;11;f6;d9;0;10;Z5;4;Z3;26;0;39;ad;9a;2;50;Z2;80;Z3;8c;1;82;4;0;40;6;b7;80;1;Z5;2;40;0;18;1;e9;0;41;10;0;24;60;0;1;Z2;1;18;1;65;20;8;0;16;10;Z2;41;0;40;Z3;20;c;79;90;Z2;91;8;50;9c;a;80;Z3;42;
    ;12;0;40;0;40;5;1;80;40;84;0;48;4;Z2;20;0;5;8;45;a0;2;10;81;6;d0;85;40;Z4;4;80;38;62;Z3;89;ad;41;85;20;20;Z2;14;5;79;42;d0;50;10;1;e0;31;da;90;Z6;b6;2c;12;0;80;8;89;5f;38;50;Z4;4;10;14;20;60;Z2;9b;16;e7;3e;20;Z4;8c;1;10;44;5;48;0;e6;aa;bf;d1;
    ;28;2;20;Z2;20;0;3;1;0;1b;22;9;8f;e3;a;80;Z4;1;0;a5;14;8;8b;98;9f;f8;U1;29;Z5;10;0;20;8a;d3;f2;19;1e;fa;fb;32;1;Z4;20;1;2;7f;fb;bc;5;7d;d6;U1;f0;4;Z4;4;4a;6;5b;ef;f7;75;7b;f3;b3;30;Z5;a;9;48;U3;8f;f2;9f;1b;2;10;Z4;1;88;1f;U3;21;7f;a9;50;80;Z5;52;
    ;27;3f;U3;e5;79;ed;a0;40;Z5;5;41;3b;U3;f6;78;84;18;c0;Z6;1;7f;U3;c0;f4;5;0;20;80;Z5;28;f;U2;fa;bf;60;80;10;Z6;52;21;1f;U2;fe;40;48;14;Z7;4;2;f;U2;7e;48;Z9;10;2;7f;U1;fc;f9;0;c0;Z8;26;50;7b;U1;db;0;40;Z9;1;b0;2d;bf;d2;Zd;87;d3;48;Zd;b;0;40;Zd;8;
    ;Z4b;T
    Si se da functia:
    Code:
    Example of compatible decompression function (Language C): 
     
    int UnSqueezeMatrix(unsigned char *pucDestMatrix, unsigned char *pucSrcM)  // dest, src 
    { 
    int iCnt; 
    unsigned char *pucDest, *pucSrc, ucVal; 
    pucSrc  = pucSrcM;    // source 
    pucDest = pucDestMatrix;   // dest 
    memset(pucDestMatrix, 0, sizeof(BMP_MATRIX));    // maz dest 
    while (*pucSrc != 'T')    // end of trame 
        { 
        ucVal = *pucSrc; 
        switch(ucVal) 
            { 
            case '\x0d':  // ignore CR , LF , separator 
            case '\x0a': 
            case ';': 
                break; 
            case 'U':     // value 0xFF 
                { 
                pucSrc++; 
                sscanf((char *)pucSrc,"%x", &iCnt); 
                memset(pucDest, 0xFF, iCnt); 
                pucDest+= iCnt; 
                break; 
                } 
            case 'Z':     // value 0 
                { 
                pucSrc++; 
                sscanf((char *)pucSrc,"%x", &iCnt); 
                memset(pucDest, 0x00, iCnt); 
                pucDest+= iCnt; 
                break; 
                } 
            default: 
                { 
                sscanf((char *)pucSrc,"%x", &iCnt); 
                *pucDest++ = (u_char)iCnt; 
                break; 
                } 
            } 
        while (*pucSrc != ';')         // skip ; separator 
            pucSrc++;
        pucSrc++; 
        } 
    return((int)pucDest - (int)pucDestMatrix); 
    } 
     
    This function needs that ";" is considered as a delimiter by the function scanf(), which is normally done in 
    most of the systems.
    Si se dau si explicatiile:
    Poate cineva sa imi dea rezultatul functiei aleia sa il compar cu ce obtin eu?
    Multumesc. Dau bere celui care decodeaza sirul si trece si prin Braila. :tongue:
     
  2. AdrianB1

    AdrianB1 Membru Senior

    Vezi in fisier. Are 2050 bytes. View attachment Marius.txt
     
  3. Marius '95

    Marius '95 Membru Senior

    Multumesc. Incerc sa descifrez in weekend, ca saptamana asta a fost turbare la serviciu.