<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Problema con interi in un array di char]]></title><description><![CDATA[<p>Devo fare una funzione che mi inserisce dei dati in un array di char (che poi invierò su seriale)</p>
<p>ciò che devo fare è questo</p>
<p>| T | P |  2 ¦ 3 | ....</p>
<p>in pratica nelle prime due posizioni ci sono dei caratteri, mentre nelle due seguenti ci devo mettere un intero di due byte (uno short).</p>
<p>altrove.. unsigned char tempoMsg[9];</p>
<p>createTempoMsg(tempoMsg)</p>
<p>void createTempoMsg(unsigned char tempoMsg[])</p>
<p>{</p>
<p>tempoMsg[0]=T_SIGN;</p>
<p>tempoMsg[1]=P_SIGN;</p>
<p>unsigned short* tempoMsgLength=(unsigned short*)(&amp;tempoMsg[2]);</p>
<p>*tempoMsgLength=6;</p>
<p>...</p>
<p>}</p>
<p>facendo così però mi va a modificare tempoMsg[1] e ci mette 6;</p>
<p>Ho scoperto quindi che shiftando tutto di 1 e quindi scrivendo:</p>
<p>unsigned short* tempoMsgLength=(unsigned short*)(&amp;tempoMsg[3]);</p>
<p>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?</p>
<p>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...</p>
<p>idee?</p>
<p>PS: sto compilando con un gcc per piattaforme ARM con linux</p>
]]></description><link>https://www.xtremehardware.com/forum//topic/25456/problema-con-interi-in-un-array-di-char</link><generator>RSS for Node</generator><lastBuildDate>Tue, 07 Apr 2026 08:26:20 GMT</lastBuildDate><atom:link href="https://www.xtremehardware.com/forum//topic/25456.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 08 Mar 2012 18:37:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problema con interi in un array di char on Fri, 09 Mar 2012 13:25:13 GMT]]></title><description><![CDATA[<p>Dopo quasi 24h di sbattimenti ho capito che il cast dei puntatori non si può fare, perché non funziona come su windows...</p>
<p>la funzione memcpy invece funziona, usero quella</p>
]]></description><link>https://www.xtremehardware.com/forum//post/375047</link><guid isPermaLink="true">https://www.xtremehardware.com/forum//post/375047</guid><dc:creator><![CDATA[Le085]]></dc:creator><pubDate>Fri, 09 Mar 2012 13:25:13 GMT</pubDate></item><item><title><![CDATA[Reply to Problema con interi in un array di char on Thu, 08 Mar 2012 18:37:35 GMT]]></title><description><![CDATA[<p>Devo fare una funzione che mi inserisce dei dati in un array di char (che poi invierò su seriale)</p>
<p>ciò che devo fare è questo</p>
<p>| T | P |  2 ¦ 3 | ....</p>
<p>in pratica nelle prime due posizioni ci sono dei caratteri, mentre nelle due seguenti ci devo mettere un intero di due byte (uno short).</p>
<p>altrove.. unsigned char tempoMsg[9];</p>
<p>createTempoMsg(tempoMsg)</p>
<p>void createTempoMsg(unsigned char tempoMsg[])</p>
<p>{</p>
<p>tempoMsg[0]=T_SIGN;</p>
<p>tempoMsg[1]=P_SIGN;</p>
<p>unsigned short* tempoMsgLength=(unsigned short*)(&amp;tempoMsg[2]);</p>
<p>*tempoMsgLength=6;</p>
<p>...</p>
<p>}</p>
<p>facendo così però mi va a modificare tempoMsg[1] e ci mette 6;</p>
<p>Ho scoperto quindi che shiftando tutto di 1 e quindi scrivendo:</p>
<p>unsigned short* tempoMsgLength=(unsigned short*)(&amp;tempoMsg[3]);</p>
<p>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?</p>
<p>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...</p>
<p>idee?</p>
<p>PS: sto compilando con un gcc per piattaforme ARM con linux</p>
]]></description><link>https://www.xtremehardware.com/forum//post/375046</link><guid isPermaLink="true">https://www.xtremehardware.com/forum//post/375046</guid><dc:creator><![CDATA[Le085]]></dc:creator><pubDate>Thu, 08 Mar 2012 18:37:35 GMT</pubDate></item></channel></rss>