Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] Konwersja w MySQL i przesunięcie bitowe
fragles
post 5.05.2009, 13:55:02
Post #1





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 14.12.2008

Ostrzeżenie: (0%)
-----


Akurat am w tabeli wartość szesnastkową jako varchar czyi np 'FFFF';'09FFAB' itd
którą trzeba przesunąć o ileś bitów

1)jak dobrać się to tego tekstu i zrobić z niego liczbę?
2)jak działa przesuwanie bitowe?
wg mnie działa następująco
1000(8) przesuwam o 1 w prawo (SELECT 8>>1) mam 4 czyli binarnie wyszło tak 0100
1000(8) przesuwam o 1 w lewo(SELECT8<<1) mam 16 czyli binarnie 10000, a wg mnie powinienem mieć 0 czyli binarnie 0000

Może się komuś przydać funkcja przerabiająca liczbę szesnastkową zapisaną jako VARCHAR na INT, z którym mozna potem robić co się chce, przesuwać, mnożyć, dzielić, dodawać

  1. DELIMITER $
  2.  
  3. DROP FUNCTION IF EXISTS `hextodec` $
  4. CREATE DEFINER=`root`@`%` FUNCTION `hextodec`(hexvc VARCHAR(32)) RETURNS int(11)
  5. BEGIN
  6.  
  7.  
  8. DECLARE slength INT DEFAULT 0;
  9. DECLARE tmp INT;
  10. DECLARE curValfmc CHAR;
  11. DECLARE curValfmi INT DEFAULT 0;
  12. DECLARE maskVal INT DEFAULT 0;
  13.  
  14. SELECT TRIM(hexvc) INTO hexvc;
  15.  
  16. SELECT LENGTH(hexvc) INTO slength;
  17. IF slength THEN
  18. SET tmp=1;
  19. createMaskValLoop: LOOP
  20. IF tmp>slength THEN
  21. LEAVE createMaskValLoop;
  22. END IF;
  23. SELECT SUBSTRING(hexvc,tmp,1) INTO curValfmc;
  24. IF curValfmc='F' OR curValfmc='f' THEN
  25. SET curValfmi=15;
  26. ELSEIF curValfmc='E' OR curValfmc='e' THEN
  27. SET curValfmi=14;
  28. ELSEIF curValfmc='D' OR curValfmc='d' THEN
  29. SET curValfmi=13;
  30. ELSEIF curValfmc='C' OR curValfmc='c' THEN
  31. SET curValfmi=12;
  32. ELSEIF curValfmc='B' OR curValfmc='b' THEN
  33. SET curValfmi=11;
  34. ELSEIF curValfmc='A' OR curValfmc='a' THEN
  35. SET curValfmi=10;
  36. ELSE
  37. SELECT CAST(curValfmc AS SIGNED) INTO curValfmi;
  38. END IF;
  39.  
  40.  
  41. SET maskVal = maskVal+(SELECT curValfmi*POW(16,slength-tmp));
  42.  
  43. SET tmp=tmp+1;
  44.  
  45. END LOOP createMaskValLoop;
  46. END IF;
  47.  
  48. RETURN maskVal;
  49.  
  50. END $
  51.  
  52. DELIMITER ;


Ten post edytował fragles 5.05.2009, 13:55:28
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
dr_bonzo
post 5.05.2009, 15:40:29
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Google fool

  1. SELECT CONV('FF', 16, 10);


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
fragles
post 6.05.2009, 06:53:58
Post #3





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 14.12.2008

Ostrzeżenie: (0%)
-----


dzięki
widać nie o to pytałem co trzeba - ale tak już czasami jest, coś się napisze na forum, coś się wymyśli po swojemu, a potem się okazuje się, że się wyważyło otwarte drzwi
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 14:33