Archivio della Categoria 'programmazione'

Ottenere il valore decimale da un numero binario in C

Venerdì 12 Dicembre 2008

Vi sarà capitata l’occasione di ritrovarvi una stringa contenente un numero binario e di doverlo convertire in un numero decimale ( o comunque memorizzarlo in una variabile ) e utilizzare i procedimenti più assurdi per farlo? No? Beati voi, a me è capitato.. anzi in particolar modo è capitato di avere i vari 1 e 0 divisi in varie variabili.. In questo post farò vedere un metodo, a mio avviso elegante, per ottenere la nostra decantata variabile contenente il valore decimale.

Ed ecco qui, subito subito la funzione:

unsigned char get_value_from_binary_string (const char *s)
{
 short int i;
 unsigned char byte = 0;
 
 if ( !s || strlen (s) != ( sizeof (unsigned char) * 8 ) )
      return byte;
 
 for ( i = (sizeof (unsigned char) * 8) - 1; i > -1; i-- )
       byte = ( byte | (s[(sizeof (unsigned char) * 8) - ( 1 + i )] - '0') ) << ( i ? 1 : 0 );
 
 return byte;
}

Naturalmente qua si parla di una stringa contenente il valore di un byte, ma è facilmente utilizzabili con stringhe contenenti valori di 2, 4, 8, 16, 32 e 64 byte utilizzando le variabili appropriate.
Il fulcro della conversione comunque sta in quelle due righe di for. 2 righe e si fa quello che molti altri farebbero in minimo 20 in modo osceno.

Ciauz ;)

Guida Gtk+ a puntate ( VIII parte )

Giovedì 11 Dicembre 2008

Bene, questo post sarà il mio trampolino di lancio per le prossime puntate.. il primo post scritto direttamente nel blog e al momento. Proviamo, speriamo che non esca un obbrobrio.

In questa puntata vedremo i dialoghi di assistenza, conosciuti nelle gtk+ come GtkAssistant che sono molto utili nelle procedure guidate. Iniziamo.

(more…)

Guida Gtk+ a puntate ( VII parte )

Martedì 9 Dicembre 2008

Oook, rieccoci qui.. sono sempre più incasinato tra vari impegni ma finalmente ho trovato un po’ ti tempo per continuare questa guida. Non ho abbandonato nessuno :)

Dov’eravamo rimasti? Ah si, i dialoghi di informazione. Bene Iniziamo subito e non perdiamoci in chiacchiere.

(more…)

Guida Gtk+ a puntate ( VI parte )

Mercoledì 3 Dicembre 2008

Scusate innanzitutto per la sospensione, per così tanto tempo, della guida a puntate ma sono stato megaraffreddato e con la febbre sto fine\inizio settimana. Sono sicuro che le Gtk+ in futuro avranno anche qualche funzione per farmi stare meglio dato che già adesso implementano il mondo intero.

Dov’è che eravamo arrivati? Ah si, i dialoghi :). Oggi vedremo le Finestre vere, quindi riprendete il vostro compilatore che stava ammuffendo, il vostro vim, geany, gedit, emacs, nano o quello che è e iniziamo.

(more…)

Guida Gtk+ a puntate ( V parte )

Venerdì 28 Novembre 2008

Abbiamo raggiunto la quinta puntata! Anvedi! Bene, non perdiamo tempo, la strada è ancora lunga e anche se probabilmente qualcuno avrò iniziato a fare i suoi primi programmini graficosi ci sono un sacco di cose da sapere per sviluppare come si deve in Gtk+.

Ora ci occupiamo delle varie finestre anche perché senza di esse non si va da nessuna parte.

Ready? GO!

(more…)

Guida Gtk+ a puntate ( IV parte )

Martedì 25 Novembre 2008

Inizia la quarta puntata, preparatevi i pop corn, lattine di opencola ( :) ), compilatori, shell e tutto il resto. Oggi finiremo la terza puntata che avevo lasciato in sospeso altrimenti diventava poi troppo lunga.

Mettetevi comodi, e iniziamo!

(more…)

Guida Gtk+ a puntate ( III parte )

Domenica 23 Novembre 2008

Ed eccoci arrivati alla terza parte, siamo giunti all’inizio di questo fantastico mondo e dopo aver dato un primo sguardo generale è ora di salutarlo :)

E come si può salutare un mondo se non con un bellissimo Hello World ?

Iniziamo.

(more…)

Guida Gtk+ a puntate ( II parte )

Sabato 22 Novembre 2008

Bene, continua la guida a puntate. L’ultima volta abbiamo dato uno sguardo agli obiettivi di questa guida, a quale conoscenze bisogna avere prima di iniziare a esplorare il fantastico mondo delle Gtk+  e qual’è la loro storia.

Oggi vedremo invece come si possono installare e come compilare un programma che ne fa uso una volta installate. Questa seconda parte sarà un po’ breve, mi rifarò con la prossima :) ( vedere la fine di quest’articolo per sapere cosa faremo )

(more…)

Guida Gtk+ a puntate ( I parte )

Venerdì 21 Novembre 2008

Ebbene, eccomi qui. Tempo fa avevo iniziato a scrivere un pdf che voleva diventare una guida, decente, alle Gtk+ in italiano, purtroppo però è un lavoro molto lungo per una persona sola e prima di arrivare alla fine probabilmente avranno già rilasciato una nuova versione delle Gtk+ :)

A questo punto ho deciso di pubblicare, in varie “puntate”, qui sul blog questa guida. E ora..

(more…)

Funzioni Standard.. poco Standard

Giovedì 7 Agosto 2008

Proprio poco fa stavo parlando in chat con Dani, mentre io insultavo quelli che hanno creato la strcmp ( in quanto se gli si passa uno dei due parametri a NULL fa andare il programma in Segmentation Fault che è una bellezza ), mi ha detto che la strcmp oltre a fare il semplice confronto tra le due stringhe restituisce anche la differenza tra i caratteri, e proprio per questo lui l’aveva utilizzata per riordinare alfabeticamente i pacchetti in slackyd.

Allora non sapendo questa cosa da niubbo della situazione mi son messo a fare un test:

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <string.h>
 
int main(int argc, char **argv)
{
 if ( argc < 3 ) return 1;
 
 printf("Diff: `%d'\n", strcmp(argv[1], argv[2]));
 
 return 0;
}

Benissimo lo vado ad avviare e mi restituisce solo 0 ( uguali ), 1 o -1 ( non uguali ).. dopo vari attimi di stupore da parte sua, va a provare lo stesso identico codice e le stesse identiche stringhe passate come parametro sul suo computer e la funzione lì restituiva davvero la differenza tra le due stringhe!

Ora mi domando cosa renda così variabile una funzione standard che dovrebbbe avere lo stesso funzionamento su tutti i computer del mondo. La versione delle libc comunque era uguale giusto per cronaca. Da notare comunque anche che ho provato la strcasecmp che non dovrebbe far parte del C Standard, e restituisce la famosa differenza tra le due!

? Mah..

P.s.: Altra cosa che mi fa incazzare, se si passa un parametro null alla strcmp, o all’atoi perchè cavolo mi deve compromettere tutto il programma? cosa gli costa a quelli che hanno scritto la gnu c library mettere due piccolissime macro del tipo:

1
2
3
4
5
6
#define return_if_fail(cond) if ( !(cond) ) { \
                                  return; \
                             }
#define return_val_if_fail(cond, val) if ( !(cond) ) { \
                                           return (val); \
                                      }

per controllare che i parametri non siano nulli? BAH!

  • StatPress

    Visits today: 3