Odbieranie parametrów binarnych GET/POST w PHP

0

Witam

Powiedzmy, że dostaje w parametrze POST/GET taka wartość 0x125641ab32de tylko w postaci binarnej nie hex. Jak odebrać taką liczbę, a dodatkowo „odciąć” 0×0125 od 0x0641ab32de.

W c odcinanie robiłem tak(uint_16 to zmienna 16 bitowa):

a = 0x125641ab32de;
b = (uint_16)((0xfff000000000 & a) >> 9)

I od razu w b miałem liczbę 293.

Chcę tego użyć do odkodowania liczby BCD(http://pl.wikipedia.org/wiki/Kod_BCD) z własnym podziałem bitów(np godzina [0-23] dostanie 5bitów), oszczędność bitów(tak, muszę oszczędzić je jakoś oszczędzić).

0

no wszystko dokładnie tak samo tylko że

"0x125641ab32de" to liczba 48 bitowa, więc powyższe zadziała tylko jeśli php będzie w wersji 64 bitowej

za to z mniejszymi liczbami jest wszystko ok
http://ideone.com/GcOeRF

jeśli chcesz odebrać dane binarne to tylko z POSTa bo w GET raczej binarnie nic nie przejdzie
odbierz, a potem zdekoduj do intów (najlepiej nie większych niż 32 bitowe) funkcją

unpack()

http://ideone.com/0QQiZk

$binary = "\x00\x00\x12\x56\x41\xab\x32\xde"; // musisz wyrównać zerami dane do wielokrotności 32 bitów
$decoded = unpack("N*", $binary);
 
// w $decoded masz teraz tablice dwoch longow 32 bitowych unsigned big-endian
// $decoded[1] = 0x00001256;
// $decoded[2] = 0x41ab32de;
 
$a = $decoded[1];
$b = ($a & 0xfff0) >> 4;
 
echo $b . ' (0x'.dechex($b) . ')'; // 293 (0x125)
aloha napisał(a):

Chcę tego użyć do odkodowania liczby BCD(http://pl.wikipedia.org/wiki/Kod_BCD) z własnym podziałem bitów(np godzina [0-23] dostanie 5bitów), oszczędność bitów(tak, muszę oszczędzić je jakoś oszczędzić).

jeśli na coś co przyjmuje wartości od 0 do 23 przydzielasz 5 bitów, które mogą przyjąć wartości od 0 do 31 to nie jest to "oszczędność bitów" tylko marnotrawienie bitów

1
unikalna_nazwa napisał(a):

jeśli na coś co przyjmuje wartości od 0 do 23 przydzielasz 5 bitów, które mogą przyjąć wartości od 0 do 31 to nie jest to "oszczędność bitów" tylko marnotrawienie bitów
Jest jeszcze kwestia oszczędności mocy obliczeniowej urządzenia wysyłającego, moim zdaniem lepiej stracić 8bitów niż 0,1s przetwarzania danych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1