Witam sedecznie =)
Mam dość niespotykany problem, i sam nie mogę sobie z nim poradzić - więc zwracam się tutaj na forum, choć w między czasie znów będę próbować. Wszystko polega na tym że chcę przepisać kod (jego działanie dokładnie) do języka PHP, co pozwoli na parsowanie (rozkodowywanie) danych, które mam na serwerze. Wszystko opiera się o zmienne i operacje bitowe, które w tym języku są dla mnie czarną magią.
Przejdę do setna sprawy, w czym problem. Posiadam sobie dajmy przykład taką zmienną:Kod$samplehex = "800300050061726D6F72020A0000000B006465736372697074696F6E011A0000000A5B41524D
4F523A202B315D0A5B4845414C54483A202B34315D04006E616D65011F00000053747572647920646
56D6F6E206C656773206F662053757374656E616E6365";
Wartosć jak widać jest przechowywana w systemie szesnastkowym, więc dla praktyczności wszystko przerabiam na tablicę binarną (czyli najpierw na string w systemie ASCII a później na wartości liczbowe).Kod$bytes = array();
$l = 0;
for ($i = 0; $i < strlen($samplehex); $i += 2)
{
$bytes[$l] = ord(chr(hexdec($samplehex[$i].$samplehex[$i + 1])));
print $bytes[$l]."|";
$l++;
}
W przykładzie sobie wszystko wypisałem, aby sprawdzić poprawność kodu. Teraz właśnie nie wiem co zrobić dalej - bo muszę ze stosu (czy jak to się profesjonalnie nazywa) powyciągać odpowiednio dane. Pokaże kod C++, który jest analogiczny do tego co chcę zrobić:Kod... funkcja używana niżej ..
template <typename T>
inline bool getType(T& ret)
{
if(size() < (int32_t)sizeof(T))
return false;
ret = *((T*)p);
p += sizeof(T);
return true;
}
inline bool getShort(uint16_t& ret) {return getType(ret);}
... kolejny etap kodu ..
uint16_t n;
if(!stream.GET_USHORT(n))
return true;
Więc teraz moim problem jest wyciągniecie z tego stosu liczby unsigned int (2 bajty = 18 bitów) - ale w PHP nie istnieje zmienna typu unsigned int (teoretycznie). Próbowałem dodać dwa kolejne bity, i nie wiem czy działa to dobrze - oto sposób:Kod$long = (int)($bytes[0] | $bytes[1])
Mam nadzieje, że ktoś udzieli mi pomocy, ponieważ już nie mam pojęcia jak temu zaradzić. Jeśli coś napisałem źle, lub nie zrozumiale chętnie się poprawię. Liczę na szybką i efektywną pomóc =).
regards,
jestemPolakiem~
jestemPolakiem~