У меня есть область общей памяти, к которой я хочу получить доступ с помощью PHP, работающего на веб-сервере. Совместно используемая память размещается так, что первые 4 байта представляют собой 32-разрядное целое число без знака, которое содержит сколько байтов являются действительными данными в оставшейся области совместно используемой памяти (данные могут иметь переменный размер), т.е.
Byte Range Value
------------------ -----------------------------------------------
0 - 3 32-bit unsigned integer - call it numBytes
4 - (numBytes + 4) char array - The actual data, total of numBytes
Как мне прочитать в первых четырех байтах как целое число? Единственное, о чем я могу думать, это сделать shmop_read($key, 0, 4)
и преобразовать возвращаемое значение строки в массив, затем преобразовать этот массив в целое число, как описано Вот. Все это кажется очень грязным, и мне было интересно, есть ли более чистый способ сделать это?
Я думаю, что это просто unpack
с N
или же V
(в зависимости от порядка байтов).
Итак, предположим, что ваша $ numBytesString выглядит \xff\xff\xff\x7f
? Тогда я бы unpack
:
$numBytesString = shmop_read($key, 0, 4);
$numBytesInt = unpack("V", $numBytesString); // assuming little-endianess
// 2147483647
Других решений пока нет …