Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Konwersja w MySQL i przesunięcie bitowe
Forum PHP.pl > Forum > Bazy danych > MySQL
fragles
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 ;
dr_bonzo
Google fool

  1. SELECT CONV('FF', 16, 10);
fragles
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
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.