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ć
DELIMITER $ DROP FUNCTION IF EXISTS `hextodec` $ CREATE DEFINER=`root`@`%` FUNCTION `hextodec`(hexvc VARCHAR(32)) RETURNS int(11) BEGIN DECLARE slength INT DEFAULT 0; DECLARE tmp INT; DECLARE curValfmc CHAR; DECLARE curValfmi INT DEFAULT 0; DECLARE maskVal INT DEFAULT 0; SELECT TRIM(hexvc) INTO hexvc; SELECT LENGTH(hexvc) INTO slength; IF slength THEN SET tmp=1; createMaskValLoop: LOOP IF tmp>slength THEN LEAVE createMaskValLoop; END IF; SELECT SUBSTRING(hexvc,tmp,1) INTO curValfmc; IF curValfmc='F' OR curValfmc='f' THEN SET curValfmi=15; ELSEIF curValfmc='E' OR curValfmc='e' THEN SET curValfmi=14; ELSEIF curValfmc='D' OR curValfmc='d' THEN SET curValfmi=13; ELSEIF curValfmc='C' OR curValfmc='c' THEN SET curValfmi=12; ELSEIF curValfmc='B' OR curValfmc='b' THEN SET curValfmi=11; ELSEIF curValfmc='A' OR curValfmc='a' THEN SET curValfmi=10; ELSE SELECT CAST(curValfmc AS SIGNED) INTO curValfmi; END IF; SET maskVal = maskVal+(SELECT curValfmi*POW(16,slength-tmp)); SET tmp=tmp+1; END LOOP createMaskValLoop; END IF; RETURN maskVal; END $ DELIMITER ;