1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-27 09:12:07 +01:00
Files
archived-doc-ru/reference/misc/functions/unpack.xml
Mikhail Alferov 2849a155cb Update unpack.xml
2024-04-02 16:42:02 +03:00

260 lines
7.5 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 5fabd07880ab15b0ad2cf7eb055c7c2b36d7120f Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.unpack" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>unpack</refname>
<refpurpose>Распаковывает данные из бинарной строки</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type class="union"><type>array</type><type>false</type></type><methodname>unpack</methodname>
<methodparam><type>string</type><parameter>format</parameter></methodparam>
<methodparam><type>string</type><parameter>string</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>offset</parameter><initializer>0</initializer></methodparam>
</methodsynopsis>
<para>
Функция распаковывает данные из бинарной строки с учётом
формата, который задали в параметре <parameter>format</parameter>.
</para>
<para>
Распакованные данные хранятся в ассоциативном массиве. Чтобы распаковать
данные, указывают коды форматов и разделяют коды слешем /.
Если аргумент повторителя указали, у каждого ключа массива после заданного имени
будет порядковый номер.
</para>
<para>
Чтобы функция соответствовала языку Perl, внесли следующие изменения:
<simplelist>
<member>
Код «a» теперь сохраняет конечные NULL-байты.
</member>
<member>
Код «A» теперь удаляет конечные пробельные ASCII-символы (пробелы, табуляцию,
переносы строк, возврат каретки и NULL-байты).
</member>
<member>
Код «Z» добавили для NULL-дополненных строк и удаления конечных NULL-байтов.
</member>
</simplelist>
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>format</parameter></term>
<listitem>
<para>
Коды форматов объясняет описание функции <function>pack</function>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>string</parameter></term>
<listitem>
<para>
Упакованные данные.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>offset</parameter></term>
<listitem>
<para>
Смещение, с которого требуется начать распаковку.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Функция возвращает ассоциативный массив, который содержит распакованные элементы
двоичной строки,&return.falseforfailure;.
</para>
</refsect1>
<refsect1 role="changelog"><!-- {{{ -->
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>7.2.0</entry>
<entry>
Типы <type>float</type> и <type>double</type> поддерживают как прямой,
так и обратный порядок байтов.
</entry>
</row>
<row>
<entry>7.1.0</entry>
<entry>
Добавили необязательный параметр <parameter>offset</parameter>.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1><!-- }}} -->
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример использования функции <function>unpack</function></title>
<programlisting role="php">
<![CDATA[
<?php
$binarydata = "\x04\x00\xa0\x00";
$array = unpack("cchars/nint", $binarydata);
print_r($array);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Array
(
[chars] => 4
[int] => 160
)
]]>
</screen>
</example>
</para>
<para>
<example>
<title>
Пример использования функции <function>unpack</function>
с повторителем
</title>
<programlisting role="php">
<![CDATA[
<?php
$binarydata = "\x04\x00\xa0\x00";
$array = unpack("c2chars/nint", $binarydata);
print_r($array);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Array
(
[chars1] => 4
[chars2] => 0
[int] => 40960
)
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<caution>
<para>
Обратите внимание, что внутренне PHP хранит целые значения как знаковые. Если
распаковать значение с типом large unsigned long с размером как у значения,
которое хранит PHP, то результатом будет отрицательное число,
даже если указали беззнаковую распаковку.
</para>
</caution>
<caution>
<para>
Если не назвать элемент, функция присвоит числовые индексы начиная с <literal>1</literal>.
Если будет больше одного безымянного элемента, функция перезапишет часть данных,
поскольку нумерация каждого элемента перезапускается с <literal>1</literal>
для каждого такого элемента.
</para>
<para>
<example>
<title>
Пример использования функции <function>unpack</function> с безымянными ключами
</title>
<programlisting role="php">
<![CDATA[
<?php
$binarydata = "\x32\x42\x00\xa0";
$array = unpack("c2/n", $binarydata);
var_dump($array);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
array(2) {
[1]=>
int(160)
[2]=>
int(66)
}
]]>
</screen>
<para>
Обратите внимание, что первое значение спецификатора <literal>c</literal>
перезаписывается первым значением спецификатора <literal>n</literal>.
</para>
</example>
</para>
</caution>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>pack</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->