\label{fig:sock_endianess}
\end{figure}
+Si può allora verificare quale tipo di endianess usa il proprio computer con
+un programma elementare che si limita ad assegnare un valore ad una variabile
+per poi ristamparne il contenuto leggendolo un byte alla volta. Il codice di
+detto programma, \file{endtest.c}, è nei sorgenti allegati, allora se lo
+eseguiamo su un PC otterremo:
+\begin{verbatim}
+[piccardi@gont sources]$ ./endtest
+Using value ABCDEF01
+val[0]= 1
+val[1]=EF
+val[2]=CD
+val[3]=AB
+\end{verbatim}%$
+mentre su di un Mac avremo:
+\begin{verbatim}
+piccardi@anarres:~/gapil/sources$ ./endtest
+Using value ABCDEF01
+val[0]=AB
+val[1]=CD
+val[2]=EF
+val[3]= 1
+\end{verbatim}%$
+
+
La \textit{endianess}\index{endianess} di un computer dipende essenzialmente
dalla architettura hardware usata; Intel e Digital usano il \textit{little
endian}, Motorola, IBM, Sun (sostanzialmente tutti gli altri) usano il
-\textit{big endian}. Il formato della rete è anch'esso \textit{big endian},
-altri esempi di uso di questi formati sono quello del bus PCI, che è
-\textit{little endian}, o quello del bus VME che è \textit{big endian}.
+\textit{big endian}. Il formato dei dati contenuti nelle intestazioni dei
+protocolli di rete è anch'esso \textit{big endian}; altri esempi di uso di
+questi due diversi formati sono quello del bus PCI, che è \textit{little
+ endian}, o quello del bus VME che è \textit{big endian}.
Esistono poi anche dei processori che possono scegliere il tipo di formato
all'avvio e alcuni che, come il PowerPC o l'Intel i860, possono pure passare
resta sempre lo stesso, anche quando il processore permetterebbe di eseguire
questi cambiamenti.
+Per controllare quale tipo di ordinamento si ha sul proprio computer si è
+scritta una piccola funzione di controllo, il cui codice è riportato
+\figref{fig:sock_endian_code}, che restituisce un valore nullo (falso) se
+l'architettura è \textit{big endian} ed uno non nullo (vero) se l'architettura
+è \textit{little endian}.
+
+\begin{figure}[htb]
+ \footnotesize \centering
+ \begin{minipage}[c]{15cm}
+ \includecodesample{listati/endian.c}
+ \end{minipage}
+ \normalsize
+ \caption{La funzione \func{endian}, usata per controllare il tipo di
+ architettura della macchina.}
+ \label{fig:sock_endian_code}
+\end{figure}
+
+Come si vede la funzione è molto semplice, e si limita, una volta assegnato
+(\texttt{\small 9}) un valore di test pari a \texttt{0xABCD} ad una variabile
+di tipo \ctyp{short} (cioè a 16 bit), a ricostruirne una copia byte a byte.
+Per questo prima (\texttt{\small 10}) si definisce il puntatore \var{ptr} per
+accedere al contenuto della prima variabile, ed infine calcola (\texttt{\small
+ 11}) il valore della seconda assumendo che il primo byte sia quello meno
+significativo (cioè, per quanto visto in \secref{fig:sock_endianess}, che sia
+\textit{little endian}). Infine la funzione restituisce (\texttt{\small 12})
+il valore del confonto delle due variabili.
+
+
+
+
\subsection{Le funzioni per il riordinamento}
\label{sec:sock_func_ord}