|
|
|
![]() |
|
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: 18:31.