Відмінності між версіями «Boolean (логічні дані)»
Рядок 61: | Рядок 61: | ||
'''X''' - повернення назад на 1 байт;<br> | '''X''' - повернення назад на 1 байт;<br> | ||
'''@''' - Заповнення нульовим кодом до заданої абсолютної позиції.<br> | '''@''' - Заповнення нульовим кодом до заданої абсолютної позиції.<br> | ||
+ | Функція '''unpack ()''' розпаковує дані із двійкового рядка згідно формату. Функція повертає масив, що містить елементи розпаковані. | ||
+ | array unpack(string $format, string $data) | ||
+ | Давайте спробуємо що-небудь запакувати. Приміром, так. | ||
+ | <? | ||
+ | $bin = pack("nvn*",0x5722,0x1148, 65, 66); // запаковываем, согласно формату | ||
+ | $var = bin2hex($bin); // перекодируем из шестнадцатеричного формата | ||
+ | echo($var); | ||
+ | ?> | ||
+ | Отже, що ми побачили: функція повернула 6 байтів, причому в такій послідовності: | ||
+ | |||
+ | 0х57, 0х22, 0х48, 0х11, 0х00, 0х41, 0х00, 0х42. Зрозуміло, чому так. Згідно заданому нами формату (nvn *), перше число ми повертаємо як беззнаковое ціле зі старшими розрядами в кінці, друге теж як беззнаковое ціле, тільки в кінці - молодші розряди (тому нам повернулося 0х48, 0х11, а не 0х11, 0х48), і все інше до кінця ми повертаємо як беззнаковое ціле зі старшими розрядами в кінці. | ||
Версія за 08:22, 30 квітня 2010
Boolean-це найпростіший тип. Він висловлює істинність значення - це може бути або TRUE, або FALSE. Булевий тип був введений в PHP4.
Перетворення в тип Boolean
Для перетворення значення в булеві тип використовуйте приведення типу (bool) або (boolean). Однак у більшості випадків вам немає необхідності використовувати приведення типу, оскільки значення буде автоматично перетворено, якщо оператор, функція або керуюча конструкція вимагає булевий аргумент.
При перетворенні в логічний тип, наступні значення розглядаються як FALSE:
- булевий FALSE
- ціле 0 (нуль)
- число з плаваючою крапкою 0.0 (нуль)
- порожній рядок і рядок "0"
- масив з нульовими елементами
- об'єкт з нульовими змінними-членами
- спеціальний тип NULL (включаючи невстановлені змінні).
Всі інші значення розглядаються як TRUE (включаючи будь-який ресурс).
Увага! -1 Вважається TRUE, як і будь-яке ненульове (негативне або позитивне) число!
<?php
var_dump((bool)"");// bool(false)
var_dump((bool)1);// bool(true)
var_dump((bool)-2);// bool(true)
var_dump((bool) "foo");// bool(true)
var_dump((bool) 2.3e5);// bool(true)
var_dump((bool) array(12));// bool(true
var_dump((bool)) array());// bool(false)
var_dump((bool)"false");// bool(true)
?>
Робота з бінарними даними (тип Boolean)
Рядок можить містить будь-які, в тому числі і бінарні дані. Для роботи з такими рядками іноді зручно використовувати функції pack () та unpack ().
pack (string $ format [, mixed $ args, ...])
Функція pack () упаковує задані аргументи на бінарну рядок, яка потім і повертається. Формат параметрів, а також їх кількість, задається за допомогою рядка $ format, яка являє собою набір Однолітерні специфікатором форматування - на зразок тих, які вказуються в sprintf (), але тільки без знаку %. Після кожного специфікатором може стояти число, яке відзначає, скільки інформації буде оброблено даними специфікатором. А саме, для форматів a, A, h і H число задає, яка кількість символів буде поміщено в бінарну рядок з тих, що знаходяться у черговому параметрі-рядку при виконанні функції (тобто, визначається розмір поля для виведення рядка). У разі @ воно визначає абсолютну позицію, в яку будуть поміщені наступні дані. Для всіх інших специфікатором наступні за ними числа задають кількість аргументів, на які поширюється дія даного формату. Замість числа можна вказати *, в цьому випадку мається на увазі, що специфікатором діє на всі залишилися дані. Ось повний список специфікатором формату:
a - рядок, вільні місця в полі заповнюються символом з кодом 0;
A - рядок, вільні місця заповнюються пробілами;
h - шістнадцяткова рядок, молодші розряди на початку;
H - шістнадцяткова рядок, старші розряди на початку;
c - знаковий байт (символ);
C - беззнаковий байт;
s - знакова короткий ціле (16 бітів, порядок байтів визначається архітектурой процесора);
S - беззнаковое короткий ціле;
n - беззнаковое ціле (16 бітів, старші розряди в кінці);
v - беззнаковое ціле (16 бітів, молодші розряди в кінці);
i - знакова ціле (розмір і порядок байтів визначається архітектурою);
I - беззнаковое ціле;
l - знакова довге ціле (32 біта, порядок байтів визначається архітектурирій);
L - беззнаковое довге ціле;
N - беззнаковое довге ціле (32 біта, старші розряди в кінці);
V - беззнаковое ціле (32 біта, молодші розряди в кінці);
f - число з плаваючою точкою (залежить від архітектури);
d - число з плаваючою точкою подвійної точності (залежить від архітектури);
x - символ з нульовим кодом;
X - повернення назад на 1 байт;
@ - Заповнення нульовим кодом до заданої абсолютної позиції.
Функція unpack () розпаковує дані із двійкового рядка згідно формату. Функція повертає масив, що містить елементи розпаковані.
array unpack(string $format, string $data)
Давайте спробуємо що-небудь запакувати. Приміром, так.
<?
$bin = pack("nvn*",0x5722,0x1148, 65, 66); // запаковываем, согласно формату $var = bin2hex($bin); // перекодируем из шестнадцатеричного формата echo($var);
?> Отже, що ми побачили: функція повернула 6 байтів, причому в такій послідовності:
0х57, 0х22, 0х48, 0х11, 0х00, 0х41, 0х00, 0х42. Зрозуміло, чому так. Згідно заданому нами формату (nvn *), перше число ми повертаємо як беззнаковое ціле зі старшими розрядами в кінці, друге теж як беззнаковое ціле, тільки в кінці - молодші розряди (тому нам повернулося 0х48, 0х11, а не 0х11, 0х48), і все інше до кінця ми повертаємо як беззнаковое ціле зі старшими розрядами в кінці.
Перейти до Змінні та типи данних в PHP