Le085 Posted March 8, 2012 Share Posted March 8, 2012 Devo fare una funzione che mi inserisce dei dati in un array di char (che poi invierò su seriale) ciò che devo fare è questo | T | P | 2 ¦ 3 | .... in pratica nelle prime due posizioni ci sono dei caratteri, mentre nelle due seguenti ci devo mettere un intero di due byte (uno short). altrove.. unsigned char tempoMsg[9]; createTempoMsg(tempoMsg) void createTempoMsg(unsigned char tempoMsg[]) { tempoMsg[0]=T_SIGN; tempoMsg[1]=P_SIGN; unsigned short* tempoMsgLength=(unsigned short*)(&tempoMsg[2]); *tempoMsgLength=6; ... } facendo così però mi va a modificare tempoMsg[1] e ci mette 6; Ho scoperto quindi che shiftando tutto di 1 e quindi scrivendo: unsigned short* tempoMsgLength=(unsigned short*)(&tempoMsg[3]); lo mette al posto giusto: ciò vuol dire che il puntatore punta all'ultima cella di memoria e non alla prima? che arcano è mai questo? ha a che fare con il big endian? il problema è che seguendo questa logica (ovvero che i puntatori puntano all'ultima cella, il resto del programma non va e vado a leggere celle di memorie non valide... idee? PS: sto compilando con un gcc per piattaforme ARM con linux Quote Link to comment Share on other sites More sharing options...
Le085 Posted March 9, 2012 Author Share Posted March 9, 2012 Dopo quasi 24h di sbattimenti ho capito che il cast dei puntatori non si può fare, perché non funziona come su windows... la funzione memcpy invece funziona, usero quella Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.