Есть в c#
метод BitConverter.ToUInt32
. Какой аналог у него в php
? Просмотрел весь SO
- не нашёл ответ
byte[] hash = MakeHash(value);
uint k = BitConverter.ToUInt32(hash, hash.Length - _signLen);
Делаю так, но на выходе null почему-то
$hash = $this->MakeHash($value);
$res = unpack("L", $hash,8);
у вас $hash
это массив байт, хотя unpack
ожидает на входе бинарную строку.
Можно сначала упаковать в бинарную строку, потом извлечь целые (для старых версих пхп, где параметра offset
нет:
$hash = [102,41,156,64,54,101,223,38,209,47,90,173,60,141,126,108];
$bin = pack("C*", ...$hash);
echo bin2hex($bin) . "\n" ;
$k = unpack("L*", $bin);
print_r($k);
получите
66299c403665df26d12f5aad3c8d7e6c
Array
(
[1] => 1083976038
[2] => 652174646
[3] => 2908368849
[4] => 1820233020
)
То ест искомое значение будет третьим в массиве. В пхп 7.1 можно сразу сделать
$k = unpack("L", $bin , 8);
В целом нет смысла упаковывать весь массив, если нам нужны только 4 байта из него, то их и надо сначала извлечь, а потом сформировать int.
$offset = 8;
$data = array_slice($hash, $offset, 4);
$tmp = pack("C*", ...$data);
$k = unpack("L", $tmp);
В целом чтобы из 4х байт составить двойное слово никакие pack/unpack
, конечно, не нужны. достаточно расставить байты на свои места, используя битовые сдвиги:
$offset = 8;
$b = array_slice($hash, $offset, 4);
$k = ($b[0] << 0) +
($b[1] << 8) +
($b[2] << 16)+
($b[3] << 24);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть класс:
В своем андроид приложении я использую NDK и у меня есть вот такой метод
Сделал pull проекта на другой компьютерТеперь Idea подчеркивает названия View в контроллере, которые я разрешаю TilesViewResolver, в jsp не видит модель...