Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Старший байт
 
 автор: Ученик   (21.05.2008 в 16:19)   письмо автору
 
 

Как определить старший байт в 4-х байтовом числе?

Есть например какое то число произвольное 419990039 как определить число записанное в старшем байте?

   
 
 автор: sim5   (21.05.2008 в 16:47)   письмо автору
 
   для: Ученик   (21.05.2008 в 16:19)
 

Сложить это число с маской логической операцией И:

<?
$n 
419990039//или соответсвует шестнадцатеричному 0x19088A17
$mask 0xFFFF0000//или соответсвует десятичному 4294901760
echo $n $mask;

   
 
 автор: Trianon   (21.05.2008 в 16:54)   письмо автору
 
   для: Ученик   (21.05.2008 в 16:19)
 

echo (419990039 >>24)&0xFF;

   
 
 автор: sim5   (21.05.2008 в 17:08)   письмо автору
 
   для: Trianon   (21.05.2008 в 16:54)
 

Точно же, нужно же выделить, а не узнать результат, да и байта. )

   
 
 автор: Trianon   (21.05.2008 в 17:20)   письмо автору
 
   для: sim5   (21.05.2008 в 17:08)
 

это пол-беды :)
хуже то, что целого 4-байтового числа 0xFFFF0000 в php (как минимум в обычном 32-битном варианте) не существует. :)

   
 
 автор: sim5   (21.05.2008 в 17:25)   письмо автору
 
   для: Trianon   (21.05.2008 в 17:20)
 

Да, 7FFFFFFF. Бывают пролеты, когда читаешь одно, а делаешь другое. )

   
 
 автор: Ученик   (21.05.2008 в 17:20)   письмо автору
 
   для: Trianon   (21.05.2008 в 16:54)
 

Спасибо то что нужно, а как теперь узнать что в остальных 3х байтах?

Если не сложно можете обьяснить что вы делаете, хотется понять принцип а не просто найти решение. )

   
 
 автор: Trianon   (21.05.2008 в 17:24)   письмо автору
 
   для: Ученик   (21.05.2008 в 17:20)
 

каждый байт - это 8 бит .
сдвигая число на 24 бита в сторону младших битов, мы перемещаем 4-й байт на место первого (теряя 3 младших байта за границей числа).

В остальных трех байтах останется
echo 419990039 & 0xFFFFFF;

   
 
 автор: Ученик   (21.05.2008 в 17:35)   письмо автору
 
   для: Trianon   (21.05.2008 в 17:24)
 

Понял, спасибо буду тренироваться)

   
 
 автор: Ученик   (09.06.2008 в 18:45)   письмо автору
 
   для: Ученик   (21.05.2008 в 17:35)
 

Здравствуйте, нужна опять ваша помощь, наверно я не до конца разобрался (

Как сделать обратное преобразование? Тоесть у нас опять есть число 419990039
старший байт которого 25 а остальные 3 байта это 559639.

Как, зная значения старшего и 3 байтов, получить инт?

   
 
 автор: Trianon   (09.06.2008 в 18:57)   письмо автору
 
   для: Ученик   (09.06.2008 в 18:45)
 

1. Привести старший байт к диапазону [-128...127],
2. Сдвинуть его на 24 разряда влево,
3. добавить значение младших разрядов.

Первый пункт нужен в рамках php, чтобы избежать преобразования во float

   
 
 автор: Ученик   (09.06.2008 в 19:14)   письмо автору
 
   для: Trianon   (09.06.2008 в 18:57)
 

Спасибо, все довольно просто оказалось

echo (25<<24)+559639;


1) насколько я понял если число выходит за диапазон то это не однобайтовое? как тогда его привести к нужному?

   
 
 автор: Trianon   (09.06.2008 в 19:38)   письмо автору
 
   для: Ученик   (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;

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования