Entra

View Full Version : help! contatore in binario


SitSpin
11-02-2008, 14:26
ciao a tutti,
ho bisogno di realizzare un modulo in linguaggio C che funzioni come un contatore binario a 32 bit. Mi servono le stringhe di '01010101.......'
da 32 bit che tale contatore dovrebbe produrre per poi usarle in un trasferimento che usa le socket.
Fare un contatore decimale è facilissimo...basta fare un ciclo for...
ma per farlo in binario come faccio??
potete darmi un suggerimento o un esempio?
Grazie mille.

Volutomitra
11-02-2008, 14:34
ciao a tutti,
ho bisogno di realizzare un modulo in linguaggio C che funzioni come un contatore binario a 32 bit. Mi servono le stringhe di '01010101.......'
da 32 bit che tale contatore dovrebbe produrre per poi usarle in un trasferimento che usa le socket.
Fare un contatore decimale è facilissimo...basta fare un ciclo for...
ma per farlo in binario come faccio??
potete darmi un suggerimento o un esempio?
Grazie mille.

Con un ciclo for? Il valore di un numero non cambia se cambia la sua rappresentazione...

AnonimoVeneziano
11-02-2008, 14:37
non ho ben capito cosa devi contare ...

Puoi essere più specifico?

SitSpin
11-02-2008, 14:42
cioè mi serve un codice C che mi generi tutte stringhe di bit di 32 caratteri in ordine crescente come fosse un contatore:
'00000000000000000000000000000000'
'00000000000000000000000000000001'
'00000000000000000000000000000010'
......

:help:

Albi89
11-02-2008, 14:43
Scusa non puoi prendere il valore del contatore e convertirlo in binario con le funzioni di libreria quando devi utilizzarlo? :D

SitSpin
11-02-2008, 14:46
che funzione di conversione, e che libreria posso usare?
cioe faccio

for(i=0;i<tot;i++)
printf("%d", i);

e poi converti(i)...

la funzione 'converti' dove la trovo? :rolleyes:

gugoXX
11-02-2008, 15:00
itoa (int value, char * str, int base );

Ma non ricordo se e' del C++ o se c'e' anche nel C

AnonimoVeneziano
11-02-2008, 15:02
Prova questa funzione (incrementstr32) .

Ecco il programmino di esempio :


#include <stdio.h>
#include <string.h>

void incrementstr32(char* str);

int main() {
char str[] = "00000000000000000000000000000000";
int i;
printf("%s\n", str);
for (i = 0; i < 1000000000; i++)
{
incrementstr32(str);
printf("%s\n", str);
}
}

void incrementstr32(char* str)
{
int counter = 0;

if (strlen(str) != 32)
return;

for ( counter = 31; counter >= 0; counter-- ) {
if ( str[counter] == '0')
{
str[counter] = '1';
counter = -1;
}
else
{
str[counter] = '0';
}
}

}


Non tiene assolutamente conto di possibili overflow.

Gli dai in pasto la stringa di partenza e lui la incrementa di 1 . la stringa deve essere lunga 32 caratteri

Ciao

EDIT: Ti consiglio di abbassare un po' il valore di comparazione del primo for del main se non vuoi andare avanti ore :asd:

AnonimoVeneziano
11-02-2008, 15:08
Ah, cambia il nome del thread mettendo il nome del linguaggio tra parentesi (ad esempio "[C]help! contatore in binario" ) altrimenti te lo chiudono

Ciao

SitSpin
11-02-2008, 15:12
grazie!