Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Funzione di compressione: testatela

    Io e il mio collega abbiamo fatto una cosa malatissima che x poco non funziona!
    Vi posto il codice, secondo me è una cosa utilissima perchè oltre a comprimere una qualsiasi stringa la cripta pure (E' UNA FIGATA)
    Vi spiego come funziona e qual'è il problema.

    Allora, il primo file è questo:

    (a.asp) Quando faccio buf=funczippa(2,stringa) chiamo la funzione per comprimere la stringa e poi la metto nel campo nascosto della form
    -------------------------------------------------------------------



    <%
    stringa = "PROVA PER VERIFICARE UNA STRINGA MOOOOLTO LUNGA E PER VEDERE QUANTI CARATTERI SERVONO PER CONTROBILANCIARE LA LUNGHEZZA DI UN FORM MULTIPART"

    buf=funczippa(2,stringa)
    %>
    <form action="b.asp" method="post" enctype="text/plain">
    <input type="hidden" name="jj" value="<%response.binarywrite buf%>">
    <input type="submit">
    </form>
    --------------------------------------------------------------------

    La funzione fa questo:
    SE LE VIENE PASSATO 1 NEL PARAMETRO OPERAZIONE DECOMPRIME LA STRINGA
    ALTRIMENTI LA COMPRIME.
    X COMPRIMERLA NON FA NIENT'ALTRO KE LEGGERE OGNI CARATTERE DELLA STRINGA ORIGINALE E SOSTITUIRLO CON LA SEQUENZA DI BIT RELATIVA NELLA MATRICE INIZIALE.
    ALLA FINE DI QUESTO CICLO HO UNA STRINGA DI 1 E 0 KE POI CONVERTO IN BYTE.
    E' QUESTA STRINGA KE VIENE SPEDITA (I CARATTERI KIARAMENTE SONO ILLEGIBILI)
    NELLA PAGINA B.ASP RICEVO LA STRINGA E RICHIAMO LA FUNZIONE FUNCZIPPA PASSANDOGLI COME OPERATORE 1 PER DECOMPRIMERE.
    QUI NON FACCIO NINET'ALTRO KE LEGGERE OGNI CARATTERE BINARIO, TRASFORMARLO IN CARATTERE X RECUPERARE LA STRINGA COMPRESSA IN FORMATO LEGGIBILE.
    PER ULTIMO LEGGO QUESTA STRINGA, LA CONVERTO IN UNA STRINGA DI 1 E 0 E CONTROLLO NELLA MATRICE X FARE LE SOSTITUZIONI CON LE LETTERE ORIGINALI.

    E' UN PO' UN MACELLO MA SPERO DI ESSERMI UN PO' SPIEGATO.
    IL PROBLEMA E' CHE FUNZIONA NON SEMPRE PERCHE' QUALCHE CARATTERE LO PERDE O LO SOSTIUTISCE IN QUALCHE MODO.

    PROVATELA, SE RIUSCIAMO A FARLA FUNZIONARE SARA' UTILISSIMA!

    CIAO A TUTTI!


    FUNZIONE FUNCZIPPA:

    E' una funzione abbastanza malata che comprime e decomprime in base al primo parametro che le viene passato.

    function funczippa(operazione,stringa)
    dim stringabinaria, stringanorm, stringabytes, byteletto, carattere
    dim codici(44,2)
    codici(1,1) = "¤": codici(1,2) = "0000"
    codici(2,1) = "|": codici(2,2) = "0010"
    codici(3,1) = "3": codici(3,2) = "0100"
    codici(4,1) = "0": codici(4,2) = "0110"
    codici(5,1) = "1": codici(5,2) = "00010"
    codici(6,1) = "7": codici(6,2) = "00011"
    codici(7,1) = "2": codici(7,2) = "00110"
    codici(8,1) = "4": codici(8,2) = "00111"
    codici(9,1) = "5": codici(9,2) = "01010"
    codici(10,1) = "6": codici(10,2) = "01011"
    codici(11,1) = "8": codici(11,2) = "01110"
    codici(12,1) = "9": codici(12,2) = "01111"
    codici(13,1) = "A": codici(13,2) = "11000"
    codici(14,1) = "E": codici(14,2) = "100000"
    codici(15,1) = "B": codici(15,2) = "100001"
    codici(16,1) = "C": codici(16,2) = "100010"
    codici(17,1) = "D": codici(17,2) = "100011"
    codici(18,1) = "T": codici(18,2) = "100100"
    codici(19,1) = "F": codici(19,2) = "100101"
    codici(20,1) = "G": codici(20,2) = "100110"
    codici(21,1) = "Q": codici(21,2) = "100111"
    codici(22,1) = "R": codici(22,2) = "101000"
    codici(23,1) = "L": codici(23,2) = "101001"
    codici(24,1) = "M": codici(24,2) = "101010"
    codici(25,1) = "N": codici(25,2) = "101011"
    codici(26,1) = "O": codici(26,2) = "101100"
    codici(27,1) = "P": codici(27,2) = "101101"
    codici(28,1) = "S": codici(28,2) = "101110"
    codici(29,1) = "U": codici(29,2) = "110010"
    codici(30,1) = "V": codici(30,2) = "110011"
    codici(31,1) = "W": codici(31,2) = "110100"
    codici(32,1) = "X": codici(32,2) = "110101"
    codici(33,1) = "Y": codici(33,2) = "110110"
    codici(34,1) = "Z": codici(34,2) = "110111"
    codici(35,1) = " ": codici(35,2) = "111000"
    codici(36,1) = ".": codici(36,2) = "111001"
    codici(37,1) = "/": codici(37,2) = "111010"
    codici(38,1) = "+": codici(38,2) = "111011"
    codici(39,1) = "*": codici(39,2) = "111100"
    codici(40,1) = "-": codici(40,2) = "111101"
    codici(41,1) = "H": codici(41,2) = "111110"
    codici(42,1) = "I": codici(42,2) = "111111"
    codici(43,1) = "K": codici(43,2) = "1011110"
    codici(44,1) = "J": codici(44,2) = "1011111"

    '----------------------- DECOMPRESSIONE -----------------------
    if operazione = 1 then

    For i = 1 To lenB(stringa)
    stringabytes = stringabytes & chr(ascB(midB,stringa,i,1)))
    Next


    for i = 1 to len(stringabytes)
    byteletto = asc(mid(stringabytes,i,1))

    '-- LEGGO IL CODICE ASCII DI OGNI CARATTERE E LO CONVERTO IN BINARIO -'-- ALLA FINE AVRO' UNA STRINGONA BINARIA -----------

    if byteletto < 128 then
    stringabinaria = stringabinaria &"0"
    else
    stringabinaria = stringabinaria &"1"
    byteletto = byteletto - 128
    end if
    if byteletto < 64 then
    stringabinaria = stringabinaria &"0"
    else
    stringabinaria = stringabinaria &"1"
    byteletto = byteletto - 64
    end if
    if byteletto < 32 then
    stringabinaria = stringabinaria &"0"
    else
    stringabinaria = stringabinaria &"1"
    byteletto = byteletto - 32
    end if
    if byteletto < 16 then
    stringabinaria = stringabinaria &"0"
    else
    stringabinaria = stringabinaria &"1"
    byteletto = byteletto - 16
    end if
    if byteletto < 8 then
    stringabinaria = stringabinaria &"0"
    else
    stringabinaria = stringabinaria &"1"
    byteletto = byteletto - 8
    end if
    if byteletto < 4 then
    stringabinaria = stringabinaria &"0"
    else
    stringabinaria = stringabinaria &"1"
    byteletto = byteletto - 4
    end if
    if byteletto < 2 then
    stringabinaria = stringabinaria &"0"
    else
    stringabinaria = stringabinaria &"1"
    byteletto = byteletto - 2
    end if
    if byteletto < 1 then
    stringabinaria = stringabinaria &"0"
    else
    stringabinaria = stringabinaria &"1"
    byteletto = byteletto - 1
    end if

    next


    for i = 1 to len(stringabinaria)
    for ii = 44 to 1 step -1
    if mid(stringabinaria,i,len(codici(ii,2))) = codici(ii,2) then
    stringanorm = stringanorm & codici(ii,1)
    i = i + len(codici(ii,2)) - 1
    exit for
    end if
    next
    next

    else
    '---------------- QUI INVECE COMPRIMO LA STRINGA -------------------
    stringanorm = cstr(stringa)

    '- OGNI CARATTERE LO SOSTITUISCO CON LA PRIMA COLONNA DELLA MATRICE--

    for i = 1 to len(stringanorm)
    for ii = 1 to 44
    if mid(stringanorm,i,1) = codici(ii,1) then
    stringabinaria = stringabinaria & codici(ii,2)
    exit for
    end if
    next
    next

    ' -- AGGIUNGO GLI ZERI PER AVERE UNA STRINGA DI 1 E 0 MULTIPLA DI 8
    for i = 1 to 8
    if len(stringabinaria) mod 8 <> 0 then
    stringabinaria=stringabinaria &"0"
    end if
    next

    ' CONVERTO 8 BIT ALLA VOLTA E MI COSTRUISCO LA STRINGA IN VERO BINARIO
    for i = 1 to len(stringabinaria) step 8
    car=ChrB(AscB(chr(128*cint(mid(stringabinaria,i,1) )+64*cint(mid(stringabinaria,i+1,1))+32*cint(mid(s tringabinaria,i+2,1))+16*cint(mid(stringabinaria,i +3,1))+8*cint(mid(stringabinaria,i+4,1))+4*cint(mi d(stringabinaria,i+5,1))+2*cint(mid(stringabinaria ,i+6,1))+1*cint(mid(stringabinaria,i+7,1)))))

    stringabytes = stringabytes & car

    Next

    end if

    if operazione = 1 then funczippa = stringanorm else funczippa = stringabytes
    end function

    %>


    -----------------------------------------------------------------
    Questo è l'ultimo file

    (B.ASP)

    <%
    'CALCOLO QUANTI BYTE LA PAGINA HA RICEVUTO
    ByteCount = Request.TotalBytes

    'VETT_BYTE E' UN VETTORE DI BYTE KE CARICO COL METODO BINARYREAD
    dim vett_byte
    vett_byte = Request.BinaryRead(ByteCount)

    Response.Write funczippa(1,vett_byte)
    %>

  2. #2
    vogliamo postarla qualche altra volta sta funzione?
    il crossposting è vietato dal regolamento del forum

    xxx

  3. #3
    Aggiungo anche il CAPS, senza contare che da regolamento sarebbe buona norma usare il comando [CODE] nel posting di un codice. :adhone:
    I nostro occhi te ne saranno eternamente grati.

  4. #4

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.