|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2007
Messaggi: 48
|
questione di dati (in C)
Ciao a Tutti,
vi pongo un mio problema su un programma in linguaggio C. Ecco la situazione: una funzione riceve un pacchetto (nel caso SRTP) tramite * void -> void funzione(void *pkt) Questo pacchetto è stato creato facendo memcpy di diversi campi (stringhe,interi). Non è dunque una struttura vera e propria,ma una serie di byte. Io dovrei prendere il valore di un determinato campo, che nello specifico è un unsigned int quando è stato copiato. So le posizioni di inizio dei singolo campi (#byte),ma nn so come ricavare il numero e porlo nella mia variabile. Grazie Mille |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
se ho capito bene:
Codice:
memcpy( &Variabile, buffer, sizeof(Variabile) );
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Oct 2007
Messaggi: 48
|
esatto,cosi avevo fatto io (sommando a buffer l'offest necessario). Purtroppo pero' sembra non funzionare...
Ho fatto delle prove,ma inconcludenti-> memcpy(pkt,stringa,sizeof(stringa)); printf("%s ",pkt,sizeof(stringa)); -> LO VISUALIZZA PERFETTO memcpy(pkt+sizeof(stringa),&(codice),sizeof(codice)); -> 'CODICE' è UN INT memcpy(&index,pkt+sizeof(stringa),sizeof(index)); printf(" ->%d\n",index); -> NULLA PURTROPPO. Help Me!!! |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
c'è un vero casino nel tuo codice ...
Codice:
memcpy(pkt,stringa,sizeof(stringa)); quindi copi da stringa a pkt per lunghezza stringa ? ![]() Codice:
printf("%s ",pkt,sizeof(stringa)); -> LO VISUALIZZA PERFETTO
Codice:
memcpy(pkt+sizeof(stringa),&(codice),sizeof(codice)); -> 'CODICE' è UN INT
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Oct 2007
Messaggi: 48
|
Allora,
con -> memcpy(pkt,stringa,sizeof(stringa)); voglio appunto avere come destinazione pkt. Nella printf avevo dimenticato di calcellare un pezzetto :P printf("%s ",pkt); -> LO VISUALIZZA PERFETTO Al pkt aggiungo anche un'intero oltre che alla stringa gia presente memcpy(pkt+sizeof(stringa),&(codice),sizeof(codice)); Adesso provo a mettere l'intero che ho copiato su un'altra variabile per vedere se riesco a riprendere il valore memcpy(&index,pkt+sizeof(stringa),sizeof(index)); Verifico..... printf(" ->%d\n",index); -> NULLA PURTROPPO. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Sembra giusto quindi metti tutto il codice altrimenti non si riesce a capire bene
che tipo di dato è pkt ?
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Oct 2007
Messaggi: 48
|
Hai ragione,avrei dovuto farlo prima...sorry
ecco il file mini di prova che ho fatto main() { unsigned char stringa[] = "stringa di prova"; unsigned char pkt[64]; unsigned char *confronto = NULL; int index; int i; int codice; codice=547; memcpy(pkt,stringa,sizeof(stringa)); printf("%s \n",pkt); memcpy(pkt+sizeof(stringa),&(codice),sizeof(codice)); printf("%s \n",pkt); memcpy(pkt+sizeof(codice),stringa,sizeof(stringa)); memcpy(&index,pkt+sizeof(stringa),sizeof(index)); printf(" -> %d \n",index); return 0; } Purtoppo 'index' alla fine non contiene il valore di 'codice' |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
c'è una linea di troppo, adesso funzica
Codice:
main()
{
unsigned char stringa[] = "stringa di prova";
unsigned char pkt[64];
unsigned char *confronto = NULL;
int index;
int i;
int codice;
codice=547;
memcpy(pkt,stringa,sizeof(stringa));
printf("%s \n",pkt);
memcpy(pkt+sizeof(stringa),&(codice),sizeof(codice));
printf("%s \n",pkt);
//memcpy(pkt+sizeof(codice),stringa,sizeof(stringa));
memcpy(&index,pkt+sizeof(stringa),sizeof(index));
printf(" -> %d \n",index);
return 0;
}
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Oct 2007
Messaggi: 48
|
Grande,è vero!!!!!!!!!!!!!!!!!!!!!!!!!!!
Ma perchè se aggiungo altra roba al pacchetto non riesco a estrapolare lo stesso il valore con la memcpy e la dimensione del valore??? mmmhhh...in teoria non dovrebbe cambiare....nn so'... |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Oct 2007
Messaggi: 48
|
risolto,sono uno scemo avevo sbagliato l'offset :P
Grazie Mille per l'aiuto!!!!!!! |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
Prego. Se posso consigliarti: soprattutto in C (ma vale sempre) devi avere sotto controllo qualsiasi istruzione
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:46.





















