Функция pack() в PHP
Доброго времени суток!
Не могу понять как преобразует функция pack() в PHP аргументы в бинарную строку. Прошу дать какие-то пояснения или ссылку на более подробные материалы.
В документации PHP есть функция pack(), которая упаковывает заданные аргументы в бинарную строку в соответствии с форматом в параметре
в документации https://www.php.net/manual/ru/function.pack.php есть такой пример:
<?php
$binarydata = pack("nvc*", 0x1234, 0x5678, 65, 66);
?>
Полученная бинарная строка длиной 6 байт будет содержать последовательность байтов 0x12, 0x34, 0x78, 0x56, 0x41, 0x42.
где
n - беззнаковый short (всегда 16 бит, порядок big endian)
v - беззнаковый short (всегда 16 бит, порядок little endian)
c - знаковый символ (char)
Вопрос: как получилось к примеру из 0x1234 два байта 0x12, 0x34 ?
ведь 0x1234 - это 16-битное число, а 0x12 и 0x34 - это два 8-битных числа.
по документации ведь n - беззнаковый short (всегда 16 бит, порядок big endian), а не два 8-битных числа.
Вопрос, как сделать цикл на ассемблере? Не турбл ассемблере, а прям настоящем, с регистрами
Так и должно быть, pack возвращает последовательность 8-битных байтов в виде бинарной строки. 16-битное число пакуется в два 8-битных (32-битное - в 4 8-битных, и тому подобная математика).
Если тебе наоборот нужно из двух 8-битных получить одно 16-битное - то функция unpack это делает.