Better Conversion of Hex by Duffer5th Feb 2005 10:40
|
---|
Summary Useful Functions allowing for more flexible conversion to and from Hexidecimal, Decimal and Binary and Reverse Hexidecimal and Reverse Binary - perhaps useful with a savegame edito Description Code ` This code was downloaded from The Game Creators ` It is reproduced here with full permission ` http://www.thegamecreators.com FUNCTION DecimalToBinary$(value AS DOUBLE INTEGER, length AS DOUBLE INTEGER) a AS DOUBLE INTEGER testvalue AS DOUBLE INTEGER a = 1 REPEAT a = a * 2 UNTIL a > value a = a / 2 testvalue = value a$ = "" REPEAT IF a <= testvalue a$ = a$ + "1" testvalue = testvalue - a ELSE a$ = a$ + "0" ENDIF a = a / 2 UNTIL a <= 0 ll = LEN(a$) IF length > ll aa = length - ll FOR r = 1 TO aa a$ = "0" + a$ NEXT r ENDIF ENDFUNCTION a$ FUNCTION BinaryToDecimal(text$ AS STRING) l = LEN(text$) bit AS DOUBLE INTEGER bit = 1 value AS DOUBLE INTEGER FOR r = l TO 1 STEP -1 IF MID$(text$,r) = "1" value = value + bit ENDIF bit = bit * 2 NEXT r ENDFUNCTION value FUNCTION DecimalToHex$(value AS DOUBLE INTEGER,length) b$ = HEX$(value) blen = LEN(b$) choice = 0 IF length > blen choice = 1 c = length - blen FOR r = 1 TO c b$ = "0" + b$ NEXT r ENDIF IF choice < 1 blen = LEN(b$) counter = 0 FOR r = 1 to blen IF MID$(b$,r) = "0" counter = r ENDIF NEXT r IF counter > 0 c = blen - counter b$ = RIGHT$(b$,c) ENDIF blen = LEN(b$) c = blen MOD 2 IF c <> 0 b$ = "0" + b$ ENDIF ENDIF a$ = b$ ENDFUNCTION a$ FUNCTION BinaryToHex$(text$) a AS DOUBLE INTEGER a = BinaryToDecimal(text$) b$ = DecimalToHex$(a,0) ENDFUNCTION b$ FUNCTION GRAB$(maintext$,firstletter,lastletter) a$ = "" mlen = LEN(maintext$) IF firstletter < 1 firstletter = 1 ENDIF IF firstletter > mlen firstletter = mlen ENDIF IF firstletter > lastletter firstletter = lastletter ENDIF FOR r = firstletter TO lastletter a$ = a$ + MID$(maintext$,r) NEXT r ENDFUNCTION a$ FUNCTION SEARCH(maintext$,querytext$) alen = LEN(maintext$) blen = LEN(querytext$) result = 0 IF blen > alen EXITFUNCTION result ENDIF IF blen = alen IF querytext$ = maintext$ result = 1 EXITFUNCTION result ENDIF IF querytext$ <> maintext$ result = 0 EXITFUNCTION result ENDIF ENDIF clen = (alen - blen) + 1 blenminus = blen - 1 FOR r = 1 TO clen rr = r + blenminus IF querytext$ = GRAB$(maintext$,r,rr) result = r ENDIF NEXT r ENDFUNCTION result FUNCTION HexToDecimal(hextext$) hlen = LEN(hextext$) test = hlen MOD 2 IF test = 1 hextext$ = "0" + hextext$ ENDIF hlen = LEN(hextext$) bytes = hlen / 2 IF bytes < 1 bytes = 1 ENDIF DIM bitsections$(bytes) nibble$ = hextext$ FOR r = 1 TO bytes a$ = RIGHT$(nibble$,2) FOR t = 0 TO 255 h$ = HEX$(t) hh = LEN(h$) xx = hh MOD 2 IF xx = 1 h$ = "0" + h$ ENDIF IF h$ = a$ bina$ = DecimalToBinary$(t,8) bitsections$(r) = bina$ ENDIF NEXT t ll = LEN(nibble$) lll = ll - 2 IF lll > 0 nibble$ = LEFT$(nibble$,lll) ENDIF NEXT r a$ = "" FOR r = 1 TO bytes a$ = bitsections$(r) + a$ NEXT r a AS DOUBLE INTEGER a = BinaryToDecimal(a$) ENDFUNCTION a FUNCTION DecimalToReverseBinary$(value AS DOUBLE INTEGER, length AS DOUBLE INTEGER) a AS DOUBLE INTEGER testvalue AS DOUBLE INTEGER a = 1 REPEAT a = a * 2 UNTIL a > value a = a / 2 testvalue = value a$ = "" REPEAT IF a <= testvalue a$ = a$ + "1" testvalue = testvalue - a ELSE a$ = a$ + "0" ENDIF a = a / 2 UNTIL a <= 0 ll = LEN(a$) IF length > ll aa = length - ll FOR r = 1 TO aa a$ = "0" + a$ NEXT r ENDIF ll = LEN(a$) b$ = "" FOR r = ll TO 1 STEP -1 b$ = b$ + MID$(a$,r) NEXT r a$ = b$ ENDFUNCTION a$ FUNCTION DecimalToReverseHex$(value AS DOUBLE INTEGER,length) b$ = HEX$(value) blen = LEN(b$) choice = 0 IF length > blen choice = 1 c = length - blen FOR r = 1 TO c b$ = "0" + b$ NEXT r ENDIF IF choice < 1 blen = LEN(b$) counter = 0 FOR r = 1 to blen IF MID$(b$,r) = "0" counter = r ENDIF NEXT r IF counter > 0 c = blen - counter b$ = RIGHT$(b$,c) ENDIF blen = LEN(b$) c = blen MOD 2 IF c <> 0 b$ = "0" + b$ ENDIF ENDIF a$ = b$ ll = LEN(a$) b$ = "" FOR r = ll TO 1 STEP -2 b$ = b$ + MID$(a$,r-1) + MID$(a$,r) NEXT r a$ = b$ ENDFUNCTION a$ FUNCTION ReverseHexToDecimal(hextext$) hlen = LEN(hextext$) test = hlen MOD 2 IF test = 1 hextext$ = "0" + hextext$ ENDIF hlen = LEN(hextext$) bytes = hlen / 2 IF bytes < 1 bytes = 1 ENDIF DIM bitsections$(bytes) nibble$ = hextext$ FOR r = 1 TO bytes a$ = LEFT$(nibble$,2) FOR t = 0 TO 255 h$ = HEX$(t) hh = LEN(h$) xx = hh MOD 2 IF xx = 1 h$ = "0" + h$ ENDIF IF h$ = a$ bina$ = DecimalToBinary$(t,8) bitsections$(r) = bina$ ENDIF NEXT t ll = LEN(nibble$) lll = ll - 2 IF lll > 0 nibble$ = RIGHT$(nibble$,lll) ENDIF NEXT r a$ = "" FOR r = 1 TO bytes a$ = bitsections$(r) + a$ NEXT r a AS DOUBLE INTEGER a = BinaryToDecimal(a$) ENDFUNCTION a FUNCTION ReverseBinaryToDecimal(text$ AS STRING) l = LEN(text$) bit AS DOUBLE INTEGER bit = 1 value AS DOUBLE INTEGER FOR r = 1 TO l IF MID$(text$,r) = "1" value = value + bit ENDIF bit = bit * 2 NEXT r ENDFUNCTION value FUNCTION HexToBinary$(hextext$) a AS DOUBLE INTEGER a = HexToDecimal(hextext$) a$ = DecimalToBinary$(a,0) ENDFUNCTION a$ |