массивы — PHP читает двоичные данные совместно используемой памяти (uint32 x = shmop_read (…))

У меня есть область общей памяти, к которой я хочу получить доступ с помощью 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) и преобразовать возвращаемое значение строки в массив, затем преобразовать этот массив в целое число, как описано Вот. Все это кажется очень грязным, и мне было интересно, есть ли более чистый способ сделать это?

1

Решение

Я думаю, что это просто unpack с N или же V (в зависимости от порядка байтов).

Итак, предположим, что ваша $ numBytesString выглядит \xff\xff\xff\x7f? Тогда я бы unpack:

$numBytesString = shmop_read($key, 0, 4);

$numBytesInt = unpack("V", $numBytesString); // assuming little-endianess

// 2147483647
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]