Odbieranie parametrów binarnych GET/POST w PHP

2013-06-14 00:06
aloha
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ć).

Pozostało 580 znaków

2013-06-14 01:18
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


Pół giga extra na dropboxie? Pół giga extra na dropboxie! Tyle wygrać! >>Klik here<<
edytowany 4x, ostatnio: unikalna_nazwa, 2013-06-14 01:35

Pozostało 580 znaków

2013-06-14 10:14
aloha
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.

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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