% Preamble
\documentclass[a4paper,12pt]{article}

% Packages
\usepackage[french]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tabularx}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{eurosym}
\usepackage{epsfig}
\usepackage{stmaryrd}

% Title
\title{Pente : Implantation du protocole}
\author{D.Moreaux}

% Document
\begin{document}
\maketitle
\section{Structures en C et en Python}
En C, le compilateur cherche à aligner les champs dans une structure afin de permettre un accès plus rapide.

Si on désire éviter cette insertion d'octets de padding, il est nécessaire d'utiliser une directive de compilateur
qui, malheureusement, change d'un compilateur à l'autre.

Dans le cas de GCC (mais aussi MinGW qui est un portage de ce dernier sous Windows), cela se fait comme suit :
\begin{verbatim*}
struct __attribute__((packed)) structure2 {
   //  ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    int id1;
    char ch1;
    int id2;
    char ch2;
    float fl1;
    };
\end{verbatim*}

En Python, on utilisera le module \verb|struct| ()https://docs.python.org/3/library/struct.html) pour utiliser un
byte array qui reprenne la même structure.

Par défaut, les commandes \verb|pack()| et \verb|unpack| utiliseront la même méthode de padding que le C sur la même
machine.

Quand on travaille sur des architectures différentes, il faudra soit imposer l'arrangement de la machine serveur, soit
supprimer le padding à l'aide d'un des caractères \verb|=|, \verb|<|, \verb|>| ou \verb|!| placé en début de format et
utiliser des structures packées côté serveur.

Dans le cas du programme devant être réalisé, il est possible d'utiliser soit des structures packées, soit des
structures normales.

\end{document}