ulong, битовая маска и битовый сдвиг в PHP из C #

Хорошо, моя проблема в том, что я долженпроцесс«большое целое число от ответа конечной точки. Это гашиш и я должен сделать немного битовой маски и битовых сдвигов, чтобы просмотреть эти данные (это версия: мажорная, минорная, сборка и т. д.) в удобочитаемом виде.

В C # Я легко написал несколько строк, чтобы сделать это обработка:

/// Endpoint data
ulong data = 567454918934921216;

ulong major = (version & 0xFFFF000000000000L) >> 48;
ulong minor = (version & 0x0000FFFF00000000L) >> 32;
ulong build = (version & 0x00000000FFFF0000L) >> 16;
ulong revision = version & 0x000000000000FFFFL;

string human = $"{major}.{minor}.{build}.{revision}";
Console.WriteLine(human);

/// Returns '2016.318.1322.0'

Однако это должно быть частью серверной задачи работает на сервере, так что я должен написать это в PHP. Проблема в том, что PHP обрабатывает это большое целое число (data) как float вырезать значительную его часть (и мне нужно каждый бит для выполнения этой обработки).

 

Итак, вопрос: как я могу «портировать» этот код C # в нормальный PHP?

Важное замечание: я не могу получить доступ к установке или модификации сервера PHP
архитектура / конфигурации. Так что я не могу перейти на 64 бит, чтобы справиться с большим
целочисленные или установить плагины.

0

Решение

Размер PHP int зависит от платформы. Вам нужно 64-битное оборудование И 64-битная версия PHP, чтобы получить собственное 64-битное целое число. Вы можете получить 64-разрядное целое число из 32-разрядных целых чисел, используя побитовые операторы. Например: построить 0xfffffffffffffffe ты можешь использовать (0xffffffff << 32) | 0xfffffffe

0

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector