<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.misc.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'function.pack.php',
    1 => 'pack',
    2 => 'Compacte des donn&eacute;es dans une cha&icirc;ne binaire',
  ),
  'up' => 
  array (
    0 => 'ref.misc.php',
    1 => 'Fonctions diverses',
  ),
  'prev' => 
  array (
    0 => 'function.ignore-user-abort.php',
    1 => 'ignore_user_abort',
  ),
  'next' => 
  array (
    0 => 'function.php-strip-whitespace.php',
    1 => 'php_strip_whitespace',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'reference/misc/functions/pack.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.pack" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">pack</h1>
  <p class="verinfo">(PHP 4, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">pack</span> &mdash; <span class="dc-title">Compacte des données dans une chaîne binaire</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-function.pack-description">
  <h3 class="title">Description</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>pack</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$format</code></span>, <span class="methodparam"><span class="type"><a href="language.types.mixed.php" class="type mixed">mixed</a></span> <code class="parameter">...$values</code></span>): <span class="type"><a href="language.types.string.php" class="type string">string</a></span></div>

  <p class="para rdfs-comment">
   Compacte les arguments <code class="parameter">args</code>
   dans une chaîne binaire, suivant le format <code class="parameter">format</code>.
  </p>
  <p class="para">
   Le concept vient du Perl et tout le formatage fonctionne de
   la même façon qu&#039;en Perl, mais quelques formats manquent
   encore (comme &quot;<code class="literal">u</code>&quot;).
  </p>
  <p class="para">
   Il est à noter que la distinction entre signé et non signé
   n&#039;affecte que la fonction <span class="function"><a href="function.unpack.php" class="function">unpack()</a></span>, tandis que
   la fonction <span class="function"><strong>pack()</strong></span> fournira le même
   résultat pour les deux formats.
  </p>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.pack-parameters">
  <h3 class="title">Liste de paramètres</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">format</code></dt>
     <dd>
      <p class="para">
       La <a href="language.types.string.php" class="link">chaîne de caractères</a> <code class="parameter">format</code> consiste en des codes
       de format suivis par un argument répéteur optionnel. Le répéteur
       peut être soit une valeur entière, soit <code class="literal">*</code> pour
       une répétition jusqu&#039;à la fin des données d&#039;entrées. Pour a, A, h, H,
       le répéteur spécifie combien de caractères d&#039;une donnée est pris, pour
       @, c&#039;est la position absolue où l&#039;on insère les prochaines données, pour
       tout le reste, le répéteur spécifie combien d&#039;arguments de données sont
       consommés et compactés dans la chaîne binaire résultante.
      </p>
      <p class="para">
       Les formats actuellement acceptés sont :
       <table class="doctable table">
        <caption><strong>Caractères de formatage pour <span class="function"><strong>pack()</strong></span></strong></caption>
        
         <thead>
          <tr>
           <th>Code</th>
           <th>Description</th>
          </tr>

         </thead>

         <tbody class="tbody">
          <tr>
           <td>a</td>
           <td>NUL - Une chaîne complétée avec <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong></td>
          </tr>

          <tr>
           <td>A</td>
           <td>SPACE - Une chaîne complétée avec un espace</td></tr>

          <tr>
           <td>h</td>
           <td>Chaîne hexadécimale h, bit de poids faible en premier</td></tr>

          <tr>
           <td>H</td>
           <td>Chaîne hexadécimale H, bit de poids fort en premier</td></tr>

          <tr>
           <td>c</td>
           <td>Caractère signé</td></tr>

          <tr>
           <td>C</td>
           <td>Caractère non signé</td></tr>

          <tr>
           <td>s</td>
           <td>entier court signé (toujours sur 16 bits, ordre des octets dépendant de la machine)</td>
          </tr>

          <tr>
           <td>S</td>
           <td>entier court non signé (toujours 16 bits, ordre des octets dépendant de la machine)</td>
          </tr>

          <tr>
           <td>n</td>
           <td>entier court non signé (toujours 16 bits, ordre des octets big endian)</td>
          </tr>

          <tr>
           <td>v</td>
           <td>entier court non signé (toujours 16 bits, ordre des octets little endian)</td>
          </tr>

          <tr>
           <td>i</td>
           <td>entier signé (taille et ordre des octets dépendants de la machine)</td>
          </tr>

          <tr>
           <td>I</td>
           <td>entier non signé (taille et ordre des octets dépendants de la machine)</td>
          </tr>

          <tr>
           <td>l</td>
           <td>entier long signé (toujours 32 bits, ordre des octets dépendant de la machine)</td>
          </tr>

          <tr>
           <td>L</td>
           <td>entier long non signé (toujours 32 bits, ordre des octets dépendant de la machine)</td>
          </tr>

          <tr>
           <td>N</td>
           <td>entier long non signé (toujours 32 bits, ordre des octets big endian)</td>
          </tr>

          <tr>
           <td>V</td>
           <td>entier long non signé (toujours 32 bits, ordre des octets little endian)</td>
          </tr>

          <tr>
           <td>q</td>
           <td>entier doublement long signé (toujours 64 bits, ordre des octets dépendant de la machine)</td>
          </tr>

          <tr>
           <td>Q</td>
           <td>entier doublement long non signé (toujours 64 bits, ordre des octets dépendant de la machine)</td>
          </tr>

          <tr>
           <td>J</td>
           <td>entier doublement long non signé (toujours 64 bits, ordre des octets big endian)</td>
          </tr>

          <tr>
           <td>P</td>
           <td>entier doublement long non signé (toujours 64 bits, ordre des octets little endian)</td>
          </tr>

          <tr>
           <td>f</td>
           <td>nombre à virgule flottante (taille et représentation dépendantes de la machine)</td>
          </tr>

          <tr>
           <td>g</td>
           <td>nombre à virgule flottante (taille dépendante de la machine, ordre des octets little endian)</td>
          </tr>

          <tr>
           <td>G</td>
           <td>nombre à virgule flottante (taille dépendante de la machine, ordre des octets big endian)</td>
          </tr>

          <tr>
           <td>d</td>
           <td>nombre à virgule flottante double (taille et représentation dépendantes de la machine)</td>
          </tr>

          <tr>
           <td>e</td>
           <td>nombre à virgule flottante double (taille dépendante de la machine, ordre des octets little endian)</td>
          </tr>

          <tr>
           <td>E</td>
           <td>nombre à virgule flottante double (taille dépendante de la machine, ordre des octets big endian)</td>
          </tr>

          <tr>
           <td>x</td>
           <td>caractère NUL</td>
          </tr>

          <tr>
           <td>X</td>
           <td>Recule d&#039;un caractère</td>
          </tr>

          <tr>
           <td>Z</td>
           <td>La chaîne terminée par NUL (ASCIIZ) sera complétée par la valeur NULL</td>
          </tr>

          <tr>
           <td>@</td>
           <td>Remplit avec des NUL jusqu&#039;à la position absolue</td>
          </tr>

         </tbody>
        
       </table>

      </p>
     </dd>
    
    
     <dt><code class="parameter">values</code></dt>
     <dd>
      <p class="para">
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.pack-returnvalues">
  <h3 class="title">Valeurs de retour</h3>
  <p class="para">
   Retourne une <a href="language.types.string.php" class="link">chaîne de caractères</a> binaire contenant les données.
  </p>
 </div>

 
 <div class="refsect1 changelog" id="refsect1-function.pack-changelog">
  <h3 class="title">Historique</h3>
  <p class="para">
   <table class="doctable informaltable">
    
     <thead>
      <tr>
       <th>Version</th>
       <th>Description</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>8.0.0</td>
       <td>
        Cette fonction ne retourne plus <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> en cas d&#039;échec.
       </td>
      </tr>

      <tr>
       <td>7.2.0</td>
       <td>
        Les types <span class="type"><a href="language.types.float.php" class="type float">float</a></span> et <span class="type"><a href="language.types.float.php" class="type double">double</a></span> prennent en charge Big Endian et Little Endian.
       </td>
      </tr>

      <tr>
       <td>7.0.15, 7.1.1</td>
       <td>
        Les codes &quot;e&quot;, &quot;E&quot;, &quot;g&quot; et &quot;G&quot; ont été ajoutés pour activer la prise en 
        charge de l&#039;ordre des octets pour les nombres à virgule flottante simple 
        et double précision.
       </td>
      </tr>

     </tbody>
    
   </table>

  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-function.pack-examples">
  <h3 class="title">Exemples</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Exemple #1 Exemple avec <span class="function"><strong>pack()</strong></span></strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$binarydata </span><span style="color: #007700">= </span><span style="color: #0000BB">pack</span><span style="color: #007700">(</span><span style="color: #DD0000">"nvc*"</span><span style="color: #007700">, </span><span style="color: #0000BB">0x1234</span><span style="color: #007700">, </span><span style="color: #0000BB">0x5678</span><span style="color: #007700">, </span><span style="color: #0000BB">65</span><span style="color: #007700">, </span><span style="color: #0000BB">66</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>
     La chaîne binaire résultante aura 6 octets de long,
     et contiendra la séquence 0x12, 0x34, 0x78, 0x56, 0x41, 0x42.
    </p></div>
   </div>
  </p>
 </div>

 
 <div class="refsect1 notes" id="refsect1-function.pack-notes">
  <h3 class="title">Notes</h3>
  <div class="caution"><strong class="caution">Attention</strong>
   <p class="simpara">
    Les codes de format <code class="literal">q</code>, <code class="literal">Q</code>, <code class="literal">J</code> et <code class="literal">P</code> ne sont pas disponibles
    sur les versions de PHP 32 bits.
   </p>
  </div>
  <div class="caution"><strong class="caution">Attention</strong>
   <p class="para">Il est à noter que PHP stocke en interne les valeurs <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> comme valeurs
    signées dépendantes de la machine.   
    Les opérations sur les entiers qui mènent à des chiffres en dehors de l&#039;espace de
    définition de l&#039;<span class="type"><a href="language.types.integer.php" class="type int">int</a></span> seront stockées dans des <span class="type"><a href="language.types.float.php" class="type float">float</a></span>.
    Lors de l&#039;empaquetage de ses flottants en entiers, ils sont transtypés vers le type
    entier. Ceci peut éventuellement mener à une représentation inattendue des octets.
   </p>
   <p class="para">Le cas le plus classique est l&#039;empaquetage de nombres non signés qui seraient
    représentables dans le type <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> si celui-ci était non signé.
    Sur les systèmes ayant un <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> d&#039;une taille de 32-bits, le transtypage
    résulte en un octet identique que si le type <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> était non signé
    (même si cela reste dépendant de l&#039;implémentation non signé vers signé, du standard C).
    Sur les systèmes ayant un <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> d&#039;une taille de 64-bits, le
    <span class="type"><a href="language.types.float.php" class="type float">float</a></span> n&#039;a souvent pas une mantisse assez large pour contenir la valeur
    sans perte de précision. Si ces systèmes possèdent aussi un type C natif
    <code class="literal">int</code> 64-bits (la plupart des *NIX ne l&#039;ont pas), le seul moyen
    d&#039;utiliser le format de paquetage <code class="literal">I</code> dans les hautes valeurs est de créer
    des valeurs <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> négatives avec la même représentation des octets que la
    valeur non signée voulue correspondante.
   </p>
  </div>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.pack-seealso">
  <h3 class="title">Voir aussi</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="function"><a href="function.unpack.php" class="function" rel="rdfs-seeAlso">unpack()</a> - D&eacute;conditionne des donn&eacute;es depuis une cha&icirc;ne binaire</span></li>
   </ul>
  </p>
 </div>


</div><?php manual_footer($setup); ?>