Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Polestar 3 Performance, test drive: comodità e potenza possono convivere
Polestar 3 Performance, test drive: comodità e potenza possono convivere
Abbiamo passato diversi giorni alla guida di Polestar 3, usata in tutti i contesti. Come auto di tutti i giorni è comodissima, ma se si libera tutta la potenza è stupefacente
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
In occasione del proprio Architecture Deep Dive 2025 Qualcomm ha mostrato in dettaglio l'architettura della propria prossima generazione di SoC destinati ai notebook Windows for ARM di prossima generazione. Snapdragon X2 Elite si candida, con sistemi in commercio nella prima metà del 2026, a portare nuove soluzioni nel mondo dei notebook sottili con grande autonomia
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-11-2007, 13:52   #1
agus83
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
agus83 è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2007, 15:25   #2
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
se ho capito bene:
Codice:
memcpy( &Variabile, buffer, sizeof(Variabile) );
dove buffer è ovviamente la posizione del singolo campo
__________________
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
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2007, 15:41   #3
agus83
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!!!
agus83 è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2007, 15:49   #4
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
c'è un vero casino nel tuo codice ...

Codice:
memcpy(pkt,stringa,sizeof(stringa));
la destinazione è a sinistra (come in tutte le funzioni standard del C)
quindi copi da stringa a pkt per lunghezza stringa ?

Codice:
printf("%s ",pkt,sizeof(stringa)); -> LO VISUALIZZA PERFETTO
passi 2 parametri alla printf ma ne visualizzi solo uno

Codice:
memcpy(pkt+sizeof(stringa),&(codice),sizeof(codice)); -> 'CODICE' è UN INT
quà si capisce che hai invertito dest e source. Codice va a sinistra perchè è la destinazione
__________________
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
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2007, 16:23   #5
agus83
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.
agus83 è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2007, 16:27   #6
trallallero
Senior Member
 
L'Avatar di trallallero
 
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
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2007, 16:41   #7
agus83
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'
agus83 è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2007, 16:46   #8
trallallero
Senior Member
 
L'Avatar di trallallero
 
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
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2007, 16:53   #9
agus83
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'...
agus83 è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2007, 17:04   #10
agus83
Member
 
Iscritto dal: Oct 2007
Messaggi: 48
risolto,sono uno scemo avevo sbagliato l'offset :P
Grazie Mille per l'aiuto!!!!!!!
agus83 è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2007, 17:07   #11
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da agus83 Guarda i messaggi
risolto,sono uno scemo avevo sbagliato l'offset :P
Grazie Mille per l'aiuto!!!!!!!
vedo che hai capito da solo.

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
trallallero è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026 Qualcomm Snapdragon X2 Elite: l'architettura del...
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Addio ai banner dei cookie? L'UE spinge ...
Le offerte Black Friday per gli smartpho...
Il controllo qualità degli iPhone...
Qualcomm Snapdragon X Elite vola con il ...
A2RL Season 2: storia, innovazione e sor...
Core Ultra Series 3: Intel conferma l'ev...
Black Friday Amazon: la GeForce RTX 5070...
EcoFlow, il Black Friday porta grande ri...
Gli sconti più pesanti del Black ...
Smart #5 BRABUS segna il nuovo record di...
Incentivi auto elettriche 2025, a volte ...
Oura apre una maxi disputa sui brevetti ...
Tre gruppi criminali si uniscono e crean...
BMW iX3: la Neue Klass supera i 1.000 km...
LinusTechTips pensa che Steam Machine do...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:53.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v