Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    133

    parsing di stringhe di bit

    salve a tutti

    c'e` un piccolo problema che sto cercando di risolvere con scarso successo, magari voi potete aiutarmi: data una "stringa di bit", cioe` un oggetto di tipo String che come caratteri contiene solo 0 e 1, qual e` secondo voi il modo migliore per prendere i singoli "byte" da questa stringa e tradurli in un vero e proprio carattere secondo il charset specificato?

    ho tentato ad esempio di usare il metodo Byte.parseByte, con base 2, ma se gli passo 8 bit da un errore, perche` a quanto pare e` un byte signed, non unsigned... questo e` quello che ho tentato finora:

    codice:
    public static String toString(String str, String charset)
    {
    	if(!isBitString(str)) return str; //se NON e` una bistring la ritorno
    	else
    	{
    		String ret = null; // output
    		byte[] arr = new byte[str.length()/8 + 1]; byte array per il parsing della stringa di bit
    		for(int i=0;i<str.length();i+=8)
    			arr[i/8] = Byte.parseByte(str.substring(i,i+8), 2); // metodo parseByte che NON riesco a far funzionare come vorrey
    		try
    		{
    			if(charset == null)
    				ret = new String(arr, "US-ASCII"); // a partire dal byte array, creo la stringa di output
    			else
    				ret = new String(arr, charset);
    		}
    		catch(Exception e)
    		{
    			System.err.println(e.getMessage());
    			System.exit(0);
    		}
    		return ret;
    	}
    }
    ma non funziona suggerimenti? qual e` una maniera semplice di modificare un byte bit per bit?

    grazie in anticipo per l'aiuto

  2. #2
    Utente di HTML.it L'avatar di bum
    Registrato dal
    Jun 2008
    Messaggi
    234
    forse ti stai solo complicando la vita con il tipo byte:
    leggi nelle API http://java.sun.com/j2se/1.4.2/docs/...lang/Byte.html
    se tu vuoi creare un byte da una stringa usi
    codice:
    costruttore :
    public Byte(String s)
    quindi dividi la stringa in pezzi di 8 caratteri 1 byte, li dai in pasto al Byte ad esempio Byte nuovo= new Byte(Stringa di 8 carratteri) o fai un array di byte riempito da un for
    E ci metti sotto il tuo try che dovrebbe funzionare
    in pratica e' questo che secondo me non va
    codice:
    String ret = null; // output
    		byte[] arr = new byte[str.length()/8 + 1]; byte array per il parsing della stringa di bit
    		for(int i=0;i<str.length();i+=8)
    			arr[i/8] = Byte.parseByte(str.substring(i,i+8), 2); // metodo parseByte che NON riesco a far funzionare come vorrey]
    La teoria è quando si sa tutto e niente funziona. La pratica è quando tutto funziona e nessuno sa il perché. Noi abbiamo messo insieme la teoria e la pratica: non c'è niente che funzioni... e nessuno sa il perché! [Albert Einstein]

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    133
    gia provato e non funziona: ricevo sempre questo errore

    codice:
    Exception in thread "main" java.lang.NumberFormatException: Value out of range. Value:"01001101" Radix:10
    comunque ho risolto, magari in maniera poco artistica, ma ora funziona, ecco come:

    codice:
    byte[] arr = new byte[str.length()/8]; // byte buffer
    byte tmp; // byte used for computation
    for(int i=0;i<str.length();i++) // for each bit
    {
    	tmp = arr[i/8];
    	tmp = (byte)(((0xFF7F>>(i%8)) & tmp) & 0x00FF);
    	arr[i/8] = (byte)(((Integer.parseInt(str.substring(i,i+1)))<<(8-((i%8)+1))) | tmp);
    	//put it in the right byte and right position
    }
    ma se avete altre idee, vi ascolto... quel metodo mi pare cosi` poco elegante

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.