|
|
|
| Как определить старший байт в 4-х байтовом числе?
Есть например какое то число произвольное 419990039 как определить число записанное в старшем байте? | |
|
|
|
|
|
|
|
для: Ученик
(21.05.2008 в 16:19)
| | Сложить это число с маской логической операцией И:
<?
$n = 419990039; //или соответсвует шестнадцатеричному 0x19088A17
$mask = 0xFFFF0000; //или соответсвует десятичному 4294901760
echo $n & $mask;
|
| |
|
|
|
|
|
|
|
для: Ученик
(21.05.2008 в 16:19)
| |
echo (419990039 >>24)&0xFF;
|
| |
|
|
|
|
|
|
|
для: Trianon
(21.05.2008 в 16:54)
| | Точно же, нужно же выделить, а не узнать результат, да и байта. ) | |
|
|
|
|
|
|
|
для: sim5
(21.05.2008 в 17:08)
| | это пол-беды :)
хуже то, что целого 4-байтового числа 0xFFFF0000 в php (как минимум в обычном 32-битном варианте) не существует. :) | |
|
|
|
|
|
|
|
для: Trianon
(21.05.2008 в 17:20)
| | Да, 7FFFFFFF. Бывают пролеты, когда читаешь одно, а делаешь другое. ) | |
|
|
|
|
|
|
|
для: Trianon
(21.05.2008 в 16:54)
| | Спасибо то что нужно, а как теперь узнать что в остальных 3х байтах?
Если не сложно можете обьяснить что вы делаете, хотется понять принцип а не просто найти решение. ) | |
|
|
|
|
|
|
|
для: Ученик
(21.05.2008 в 17:20)
| | каждый байт - это 8 бит .
сдвигая число на 24 бита в сторону младших битов, мы перемещаем 4-й байт на место первого (теряя 3 младших байта за границей числа).
В остальных трех байтах останется
echo 419990039 & 0xFFFFFF;
|
| |
|
|
|
|
|
|
|
для: Trianon
(21.05.2008 в 17:24)
| | Понял, спасибо буду тренироваться) | |
|
|
|
|
|
|
|
для: Ученик
(21.05.2008 в 17:35)
| | Здравствуйте, нужна опять ваша помощь, наверно я не до конца разобрался (
Как сделать обратное преобразование? Тоесть у нас опять есть число 419990039
старший байт которого 25 а остальные 3 байта это 559639.
Как, зная значения старшего и 3 байтов, получить инт? | |
|
|
|
|
|
|
|
для: Ученик
(09.06.2008 в 18:45)
| | 1. Привести старший байт к диапазону [-128...127],
2. Сдвинуть его на 24 разряда влево,
3. добавить значение младших разрядов.
Первый пункт нужен в рамках php, чтобы избежать преобразования во float | |
|
|
|
|
|
|
|
для: Trianon
(09.06.2008 в 18:57)
| | Спасибо, все довольно просто оказалось
1) насколько я понял если число выходит за диапазон то это не однобайтовое? как тогда его привести к нужному? | |
|
|
|
|
|
|
|
для: Ученик
(09.06.2008 в 19:14)
| | >1) насколько я понял если число выходит за диапазон то это не однобайтовое? как тогда его привести к нужному?
Необязательно. 180 к примеру.
$highbyte = 180;
$lowbytes = 559639;
$highbyte = $highbyte & 255; // диапазон 0...255
if($highbyte > 127) $highbyte -= 256; // диапазон -128...127
$lowbytes &= 0xFFFFFF;
$number = $highbyte | $lowbyte;
echo $number;
|
| |
|
|
|