Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PI_lektsii_2016.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
6.12 Mб
Скачать

12.5 Функції перетворення кодування

12.5.1 convert_cyr_string ().

Синтаксис:

string convert_cyr_string (string str, string from, string to)

Функція перетворює рядок з одного кодування кирилиці в іншу. Вона переводить рядок str з кодування from в кодування to.

Значення from і to це поодинокі символи, що визначає кодування:

  1. k - koi8-r;

  2. w - windows-1251;

  3. i - iso8859-5;

  4. a - x-cp866;

  5. d - x-cp866;

  6. m - x-mac-cyrillic.

Давайте для прикладу перекодуємо слово "визначає" з кодування windows-1251 в koi8-r і назад:

<?

    $ Str1 = "визначає";

    $ Str2 = convert_cyr_string ($ str1, "w", "k");

    echo ("result of translate '$ str1' to koi8-r is '$ str2'");

    echo ("<br>");

    $ Str3 = convert_cyr_string ($ str2, "k", "w");

    echo ("result of translate '$ str2' to win is '$ str3'");

?>

Результат:

result of translate 'визначає' to koi8-r is 'ПРТЕДЕМСАЕЙК'

result of translate 'ПРТЕДЕМСАЕЙК' to win is 'визначає'

12.5.2 bin2hex ()

Виробляє побайтове перетворення символьних даних в шістнадцятковий вид.

Функція bin2hex () приймає в якості єдиного параметра рядок і повертає строкове шістнадцяткове представлення символів, що містяться в цьому рядку.

Для прикладу давайте перекодуємо теж саме слово "визначає":

<?

    $ Str1 = "визначає";

    $ Str2 = bin2hex ($ str1);

    echo ($ str2);

?>

Результат:

  cfd0d2c5c4c5ccd1c0ddc9ca

12.6 Функції роботи з бінарними даними pack () unpack ()

Власне, таких функцій дві – pack () та unpack (). Перша здійснює пакетування даних в двійковий рядок, а друга – розпаковує дані з двійкового рядка.

12.6.1 pack()

Синтаксис:

string pack(string format [ ,mixed $args, ...])

Функція pack () упаковує задані в її параметрі аргументи в бінарний рядок. Формат параметрів і їх кількість задається параметром $ format, за допомогою тих же специфікаторів форматування, про які ми говорили, тільки без знака%. Після кожного специфікатора може стояти число, яке говорить про те, скільки інформації буде оброблено даним специфікатором.

Для форматів a, A, h і H це число задає кількість символів, які будуть поміщені в бінарний рядок з тих, що знаходяться в параметрі-рядка при виклику функції (тобто, фактично визначається розмір поля виводу рядка). Якщо ми використовуємо специфікатор "@", то ми визначаємо абсолютну позицію, в яку будуть поміщені дані.

Для всіх інших специфікаторів наступні за ними числа задають кількість аргументів, на які поширюється дія цього формату. Замість числа можна вказати *, в цьому випадку специфікатор діє на всі дані, яку залишилися. Зауважимо, що функція повертає упаковані дані в шістнадцятковому форматі.

Список специфікаторів формату:

  1. a – рядок, вільні місця в поле заповнюються символом з кодом 0;

  2. A – рядок, вільні місця заповнюються відступами;

  3. h – шістнадцяткова рядок, молодші розряди на початку;

  4. H – шістнадцяткова рядок, старші розряди на початку;

  5. c – знаковий байт (символ);

  6. C – беззнаковий байт;

  7. s – знакове коротке ціле;

  8. S – беззнакове коротке число;

  9. n – беззнакове ціле (16 бітів, старші розряди в кінці);

  10. v – беззнаковве ціле (16 бітів, молодші розряди в кінці);

  11. i – знакове ціле (розмір і порядок байтів визначається архітектурою);

  12. I - беззнакове ціле;

  13. l – знакове довге ціле (32 біта, порядок знаків визначається архітектурою);

  14. L – беззнакове довге ціле;

  15. N – беззнакове довге ціле (32 біта, старші розряди в кінці);

  16. V – беззнакове ціле (32 біта, молодші розряди в кінці);

  17. f – число з плаваючою точкою;

  18. d – число подвійної точності;

  19. x – символ з нульовим кодом;

  20. X – повернення назад на 1 байт;

  21. @ – заповнення нульовим кодом до заданої абсолютної позиції.

12.6.2 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), і все інше до кінця ми повертаємо як беззнакове ціле зі старшими розрядами в кінці.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]