Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Heksadecymalne na dziesiętne
Forum PHP.pl > Forum > Przedszkole
rudald
Dla "potrenowania" myślenia stwierdziłem, że napiszę program przeliczający systemy liczbowe. System binarny już opracowałem w dwie strony i teraz myślę nad heksadecymalnym

  1. <?php
  2. $b="19a";
  3. $c=str_split($b,1);
  4. $ilosc=strlen($b);
  5. $liczba2=0;
  6. print_r($d);
  7. $n=0;
  8. if(in_array("A",$d) or (in_array("a",$d)))
  9. {
  10.  
  11. $d[0]=10;
  12. for ($i=1; $i<=$ilosc; $i++)
  13. {
  14. echo $liczba=pow(16,$n)*$d[$n];
  15. echo '<br>';
  16. $liczba2=$liczba+$liczba2;
  17. $n++;
  18. }
  19. echo 'jest a';
  20. }
  21. echo $liczba2;
  22.  
  23. ?>


Więc generalnie mam problem taki: Chciałbym, żeby program wyszukiwał na którym miejscu znajduje się element alfabetu. Jest może taka funkcja? Szukałem, w funkcjach 'array' ale nie zdołałem znaleźć lub pominąłem ją przypadkiem.
By później móc podnieść ją odpowiednio do potęgi : ).

Wiem, że będę musiał zmienić konstrukcję warunku, bo musiałbym się nieco namęczyć, a przecież program ma być efektowny i efektywny. Litera A dla przykładu
wookieb
array_search
strpos

http://pl2.php.net/hexdec
Crozin
Trenowanie myślenia zacznij z innej strony. Skoro w PHP jest taka funkcja jak hexdec czy bardziej ogólna base_convert, to można by podejrzeć ich źródła (w końcu PHP jest projektem OpenSource). Możesz też w Google'a wklepać hexadecimal decimal conversion algorithm.

Na 100% uzyskasz dużo lepsze (bo bardziej wyczerpujące) informacje. O zaoszczędzonym czasie nie wspominając.
rudald
Szukam szukam i znaleźć nie potrafię

mamy tablicę a w niej liczba 19a
po zamienieniu kolejności
Array ( [0] => a [1] => 9 [2] => 1 )

jest jakaś funkcja, która sprawdza czy w liczbie istnieje litera i która zwraca jaka to litera ?
Dziękuję z góry za odpowiedzi
Crozin
Cytat
Dlaczego się upierasz, żebym korzystał z czego innego ?
Upieram się byś przeanalizował istniejące już rozwiązania, zrozumiał zasadę ich działania, a następnie zaaadpotował je do swoich potrzeb, czyli przerobił na skrypt PHP.

Cytat
Zaplanowałem sobie SAM program i na jego skróceniu będzie mi zależało jak go napiszę : ), więcej się nauczę - zaufaj mi.
Ty masz to zrobić sam, po prostu zamiast wypytywać nas o to czy istnieje coś tam, albo jak zrobić coś tam możesz samemu zajrzeć w dołączone źródła. Nie masz ich bezmyślnie kopiować.

Cytat
jest jakaś funkcja, która sprawdza czy w liczbie istnieje litera i która zwraca jaka to litera ?
Tak, ctype_alpha - ale równie dobrze możesz wykorzystać operatory większości i mniejszości.
rudald
Przepraszam, za to że naskoczyłem - źle zrozumiałem treść Twojej wypowiedzi.
Wygląda na to, że w jakiś sposób skorzystałem z Twej rady - porównałem tablice i podstawiłem używając str_replace.
Pisałem znów program odwrotny i mam błąd - mianowicie:
Z liczby 39435 w systemie Hex wychodzi 9AB a ma wyjść 9A0B pomija mi 0.

  1. <?php
  2. echo $b=39435;
  3. echo '<br>';
  4. $c=$b;
  5.  
  6. do
  7. {
  8. for($i=0; $b>=16; $i++)
  9. {
  10. echo $b=floor($b/16);
  11. echo '<br>';
  12. }
  13. $n++;
  14. $d[$n]=$b;
  15. $liczba=pow(16,$i);
  16. echo $c=$c-$liczba*$b;
  17. $b=$c;
  18. echo '<br>';
  19. }
  20. while($b>=1);
  21.  
  22. print_r($d);
  23. ?>

po wyświetleniu zwraca:
39435
2464
154
9
2571
160
10
11
0
Array ( [1] => 9 [2] => 10 [3] => 11 )

Orientujesz się może gdzie jest błąd ?
Crozin
Szczerze powiedziawszy to ciężko mi pojąć co Ty tam dokładnie robisz (może dlatego, że ledwo co wstałem).

Przyjrzyj się temu: http://ideone.com/Pjsi1
rudald
Zmiażdżyłeś mnie tym kodem - sam pisałeś ?
Wszystko tam jasne i logiczne, ale powiem Ci, że ja naprawię ten swój biggrin.gif, tak dla własnej satysfakcji.
Bardzo dziękuję za zainteresowanie : ).

Już potrafię wyjaśnić w czym tkwi problem.
Dzielę liczbę przez 16 aż będzie w zakresie 0-16 i ma ją wpisać do tablicy, wszystko gra póki nie pojawi się liczba z tego zakresu, bo on jej nie będzie dzielił tylko wpisywał, ale zawsze wyjdzie z tego dzielenia 0. Hm jak taki warunek tu wrzucić ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.