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

    operazioni bit a bit su caratteri

    Salve a tutti!
    Ho un problema. Vorrei fare degli shift di bit sui caratteri e non sui numeri.
    Mi spiego meglio; vorrei sapere se posso fare in Javascript le seguenti istruzioni Java:

    char mask;
    char tmp2;
    char[] msgcoder = new char[N];

    mask = (char) ( (~0) >> 5 ); //corrisponde a 00000111
    tmp2 = (char) (mask & msgcoder[i]);
    msgcoder[i] = (char) ( (tmp1 << 5) | msgcoder[i] );

    e poter avere ancora dei caratteri.

    Come posso fare ciò? Oppure devo per forza usare un applet?

    Grazie infinite!!!!!



    Kay*

  2. #2
    abbiamo un piccolo problema: in javascript non esiste il tipo primitivo char!

  3. #3
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133

    Re: operazioni bit a bit su caratteri

    Originariamente inviato da kay2000
    Salve a tutti!
    Ho un problema. Vorrei fare degli shift di bit sui caratteri e non sui numeri.
    Mi spiego meglio; vorrei sapere se posso fare in Javascript le seguenti istruzioni Java:

    char mask;
    char tmp2;
    char[] msgcoder = new char[N];

    mask = (char) ( (~0) >> 5 ); //corrisponde a 00000111
    tmp2 = (char) (mask & msgcoder[i]);
    msgcoder[i] = (char) ( (tmp1 << 5) | msgcoder[i] );

    e poter avere ancora dei caratteri.

    Come posso fare ciò? Oppure devo per forza usare un applet?

    Grazie infinite!!!!!



    Kay*
    Non è che qui tutti conoscono java (è più facile il contrario) provando a spiegare bene cose ti serve, forse troviamo un altra soluzione.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  4. #4
    In effetti, senza una spiegazione non è facile capire...

    Per un esame universitario ho costruito un'applicazione, in cui dovevo salvare una stringa in un file, in maniera tale che non si potesse leggere se aperto con il notepad...
    Per fare ciò, ho sfruttato il fatto che ogni carattere è codificato con una serie di bit e ho fatto una cosa del genere:

    ABCD in binario è 01000001-01000010-01000011-01000100
    Carattere per carattere ho fatto lo shift a destra di tre bit, che poi si riversano nel carattere successivo.
    Per cui la stringa codificata risulta 00001000-00101000-01001000-01101000-100 e se salvata su un file con un notepad appare così: UnCaratterePerIlBackSpace(HhÇ

    Ora vorrei fare il processo inverso ma in javascript.
    So farlo in Java, ma in Javascript posso fare le operazioni bit-a-bit solo con i numeri...

    Vorrei sapere se è possibile ciò che chiedo oppure se mi devo affidare per forza ad un'applet...


    Spero di essermi spiegata, perchè meglio non riesco! :P

    Grazie tante!!

    Kay*

  5. #5
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Premetto che il javascript ha il potere di legge file che siano text o html (che sono riconosciuti da tutti i browser).
    Forse so ho capito potresti creati un array cosi da crearti un alfabeto codificato, tipo:
    var alfabeto = new Array()
    alfabeto[A] = "01000001"
    alfabeto[B] = "01000010"
    alfabeto[C] = "01000011"
    alfabeto[D] = "01000100"

    Questa è solo un base da cui partire, in oltre l'idea potrebbe non funzionare.
    Va anche detto che sei già in grado di svilupparlo in applet e a te non ti serve per forza js, ne vale la pena scervellarsi per crearlo in javascript?
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  6. #6
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    mi vergogno di questo, ma è il meglio che ne potessi togliere fuori
    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title>Pagina senza titolo</title>
    <script language="javascript" type="text/javascript">
    // <!CDATA[
    
    var cod = "";
    function Button1_onclick() 
    {
    
        var a = document.getElementById("Text1").value;
        var s = codifica(a);
        cod = s;
        document.getElementById("span1").innerHTML = s;   
        //for(var i = 0; i < s.length; i++) alert(s.charCodeAt(i));
    
    }
    
    function Button2_onclick() 
    {
        var a = cod;
        var s = decodifica(a);
        document.getElementById("span2").innerHTML = s;
        //for(var i = 0; i < s.length; i++) alert(s.charCodeAt(i));
    
    }
    
    function codifica(a)
    {
        var s = "";
        var key = 0;
        var keyp = 0;
        var b3tmp = 0;
        var b3 = 0;
        
        for(var i = a.length - 1; i >= 0; i--)
        {
            key = a.charCodeAt(i); //ricavo il codice carattere
            b3 = (key & 7);//recupero i tre bit meno significativi (quelli di destra)
            key = (key >> 3); //sposto tutti i bit di tre posizioni verso destra
                    
            //memorizzo questi tre bit dell'ultimo carattere da usare per il primo carattere
            if(i == a.length - 1) 
            {
                b3tmp = b3;
            }
            else
            {
                //nel carattere precedente aggiungo i tre bit persi del carattere corrente
                keyp = ((b3 << 5) | keyp);
                //compongo la stringa
                s = String.fromCharCode(keyp) + s;
            }
            keyp = key;
            
        }
        //aggiungo nel carattere corrente i tre bit memorizzati nel primo carattere considerato
        key = keyp;
        keyp = ((b3tmp << 5) | keyp);
        s = String.fromCharCode(keyp) + s;
        return s;
        
        //for(var i = 0; i < s.length; i++) alert(s.charCodeAt(i));
    }
    
    function decodifica(a)
    {
        var s = "";
        var key = 0;
        var keyp = 0;
        var b3tmp = 0;
        var b3 = 0;
        
        for(var i = 0; i < a.length; i++)
        {
            key = a.charCodeAt(i); //ricavo il codice carattere
            b3 = (key & 224);//recupero i tre bit più significativi (quelli di sinistra)
            key = ((key << 3) & 255); //sposto tutti i bit di tre posizioni verso sinistra (voglio solo otto bit)
                    
            //memorizzo questi tre bit dell'ultimo carattere da usare per il primo carattere
            if(i == 0) 
            {
                b3tmp = b3;
            }
            else
            {
                //nel carattere precedente aggiungo i tre bit persi del carattere corrente
                keyp = ((b3 >> 5) | keyp);
                //compongo la stringa
                s = s + String.fromCharCode(keyp);
            }
            keyp = key;
            
        }
        //aggiungo nel carattere corrente i tre bit memorizzati nel primo carattere considerato
        key = keyp;
        keyp = ((b3tmp >> 5) | keyp);
        s = s + String.fromCharCode(keyp);
        return s;
        
        //for(var i = 0; i < s.length; i++) alert(s.charCodeAt(i));
    
    }
    
    
    
    // ]]>
    </script>
    </head>
    <body>
        <h3>Scrivi qualcosa, poi premi codifica per codificare e decodifica per decodificare, in successione</codifica></h3>
        <input id="Text1" type="text" value="ABCD" />
        
    
    
        <input id="Button1" type="button" value="codifica" onclick="return Button1_onclick()" style="width: 86px" />
        <span id="span1"></span>
        
    
    
        <input id="Button2" type="button" value="decodifica" onclick="return Button2_onclick()" style="width: 86px" />
        <span id="span2"></span>
        
    </body>
    </html>
    Pietro

  7. #7
    Ti ringrazio, pietro09!
    La mia spiegazione è stata sicuramente non perfetta, perchè ho dovuto apportare delle modifiche al tuo codice, ma mi è stato di enorme aiuto!!
    Ora sono riuscita ad ottenere ciò che voglio!!!!

    Grazie infinite!


    Kay*

  8. #8
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da kay2000
    Ti ringrazio, pietro09!
    La mia spiegazione è stata sicuramente non perfetta, perchè ho dovuto apportare delle modifiche al tuo codice, ma mi è stato di enorme aiuto!!
    Ora sono riuscita ad ottenere ciò che voglio!!!!

    Grazie infinite!


    Kay*
    a me piacerebbe vedere il codice, così, tanto per imparare qualcosa di nuovo.

    ps. ps. BEN COMMENTATO, però
    Pietro

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 © 2025 vBulletin Solutions, Inc. All rights reserved.