[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: затруднение с переводом Decimal->HEX
svolota
Возникла проблема с переводом из decimal в HEX, а точнее переводит нормально в части getInvertHEXBits, но когда массив нужно инвертировать то не инвертирует массив из десятичного кратного 16 и кратного 10 (кроме 10). Укажите пожалуйста на ошибку. Заранее спасибо!
class DecimalToHEX
{
public function __construct($decimalRed, $decimalGreen, $decimalBlue)
{
$this->decimalRed = $decimalRed;
$this->decimalGreen = $decimalGreen;
$this->decimalBlue = $decimalBlue;
}
public function getInvertHEXBits($divide)
{
$divider = 16;
$intPart = 0;
$reminder[0] = 0;
$remInd = 0;
while($divide > 0)
{
$intPart = intval($divide / $divider);
$reminder[$remInd] = $divide - ($intPart * $divider);
$remInd++;
$divide = $intPart;
}
return $reminder;
}
public function getHEX($decimal)
{
$invertMassOfBits = $this->getInvertHEXBits($decimal);
$normalMassOfBits = array();
$numOfBits = count($invertMassOfBits);
$i = 1;
$HEXStr = '';

foreach($invertMassOfBits as $val)
{

if($val > 9)
{

switch ($val)
{

case 10 :
$val = 'A';
break;

case 11 :
$val = 'B';
break;

case 12 :
$val = 'C';
break;

case 13 :
$val = 'D';
break;

case 14 :
$val = 'E';
break;

case 15 :
$val = 'F';
break;
}
}

$normalMassOfBits[$numOfBits - $i] = $val;
$HEXStr .= $val;
$i++;
}
$normalMassOfBits[$numOfBits + 1] = $HEXStr;
//содержит массив битов + последний бит - всё число HEX
return $HEXStr;
}
public function GetSummaryHEX()
{

if(iconv_strlen($this->getHEX($this->decimalRed)) > 1)
{
$massHEX[0] = $this->getHEX($this->decimalRed);
}
else
{
$massHEX[0] = '0'. $this->getHEX($this->decimalRed);
}

if(iconv_strlen($this->getHEX($this->decimalGreen)) > 1)
{
$massHEX[1] = $this->getHEX($this->decimalGreen);
}
else
{
$massHEX[1] = '0'. $this->getHEX($this->decimalGreen);
}

if(iconv_strlen($this->getHEX($this->decimalBlue)) > 1)
{
$massHEX[2] = $this->getHEX($this->decimalBlue);
}
else
{
$massHEX[2] = '0'. $this->getHEX($this->decimalBlue);
}
//$massHEX[0] = $this->getHEX($this->decimalRed);
//$massHEX[1] = $this->getHEX($this->decimalGreen);
//$massHEX[2] = $this->getHEX($this->decimalBlue);

$sumHEX = $massHEX[0] . $massHEX[1] . $massHEX[2];
return $sumHEX;
}

}

echo '<form name="color" method="post" action="'. $_SERVER['PHP_SELF'] .'">';
echo '<input type=text size=5 name=red value="">';
echo '<input type=text size=5 name=green value="">';
echo '<input type=text size=5 name=blue value="">';
echo '<input type=submit>';
echo '</form>';
$decimal = new DecimalToHEX($_POST['red'], $_POST['green'], $_POST['blue']);
$pp = $decimal -> GetSummaryHEX();
echo 'HEX: '. $pp;




Спустя 27 минут, 9 секунд (26.07.2011 - 14:59) Invis1ble написал(а):
что-то не понятно, чем не подходит штатная dechex() ?

Спустя 4 минуты, 52 секунды (26.07.2011 - 15:04) svolota написал(а):
Цитата (Invis1ble @ 26.07.2011 - 11:59)
что-то не понятно, чем не подходит штатная dechex() ?

Ну... вот такое вот задание sad.gif, видимо важна концепция а не ответ в виде 13981010 = 2222216

Спустя 35 минут (26.07.2011 - 15:39) svolota написал(а):
Во он! Работает!
public function getHEX($decimal)
{
$invertMassOfBits = $this->getInvertHEXBits($decimal);
$normalMassOfBits = array();

$numOfBits = count($invertMassOfBits);
$i=0;
$HEXStr='';
foreach ($invertMassOfBits as $val)
{
if($val>9)
{
switch($val)
{
case 10: $val='A'; break;
case 11: $val='B'; break;
case 12: $val='C'; break;
case 13: $val='D'; break;
case 14: $val='E'; break;
case 15: $val='F'; break;
}
}

$invertMassOfBits[$i]=$val;
$i++;
}
$normalMassOfBits=array_reverse($invertMassOfBits);
foreach($normalMassOfBits as $val)
{
$HEXStr .= $val;
}
return $HEXStr;
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.