|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Nov 2002
Messaggi: 257
|
[c] puntatori astringa
domanda molto semplice.
Visto che nel compilatore che sto usando non è implementata la funzione itoa() ho pensato bene di scriverla. Codice:
char* bitoa(unsigned int number)
{
char string[N];
unsigned int i;
for(i=N-1;i>0;i--)
{string[i]=(number%2)+'0';
number=number/2;}
return string;
}
Se faccio una chiamata a questa funzione di questo tipo printf("%s",itoa(numero)); con numero unsigned int vengono fuori delle porcherie, dove sbaglio ?
__________________
WebMaster di http://www.dccworld.coml'unico sito italiano dedicato interamente ai sistemi di controllo digitale per il modellismo ferroviario. |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Nov 2002
Messaggi: 257
|
Devo stampare il decimale in binario.
__________________
WebMaster di http://www.dccworld.coml'unico sito italiano dedicato interamente ai sistemi di controllo digitale per il modellismo ferroviario. |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Apr 2007
Messaggi: 27
|
devi dichiarare string come puntatore e allocare lo spazio necessario alla stringa
char *string; string=(char*)malloc(N*sizeof(char)); ...elaborazione... return string; Ciao |
|
|
|
|
|
#6 |
|
Junior Member
Iscritto dal: Apr 2007
Messaggi: 27
|
Esempio di codice:
Codice:
#include <stdio.h>
#include <stdlib.h>
char* bitoa(unsigned int number);
int main ( void )
{
unsigned int numero=100;
printf("%d --> %s \n",numero,bitoa(numero));
system("pause");
return 0;
}
char* bitoa(unsigned int number)
{ char *string;
unsigned int i;
unsigned int temp=number;
int len=0;
while (temp)
{ temp/=2; // calcolo quanto sarà lunga la string
len++; }
string=(char*)malloc(len*sizeof(char)); // alloco lo spazio necessario alla stringa
for(i=0 ; i<len ; i++)
{
string[i]=(number%2)+'0'; // conversione int-char
number=number/2; // ottengo un numero al rovescio
}
string[i]='\0'; // terminatore di stringa
for ( i=0 ; i<len/2 ; i++ ) // raddrizzo la stringa
{
temp=string[i];
string[i]=string[len-1-i];
string[len-1-i]=temp;
}
return string;
}
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
E lo spazio per il nullo finale? no?
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Nov 2002
Messaggi: 257
|
Alla fine l'ho fatta cosi. Considerate che le mie stringhe sono sempre di 8 caratteri e per mie necessità se passo stringhe più corte devo allungarle ad 8.
Codice:
char* bitoa(unsigned int number,unsigned int lung,char end[])
{
static char string[N];
int i,y=0;
//number <<= N-lung;
for(i=N-1;i>=0;i--)
{
if(i<N-lung)
{string[i]=end[y];
y++;}
else
{string[i]=(number%2)+'0';
number=number/2;}
}
return string;
}
__________________
WebMaster di http://www.dccworld.coml'unico sito italiano dedicato interamente ai sistemi di controllo digitale per il modellismo ferroviario. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:46.




















