TGC Codebase Backup



Better Conversion of Hex by Duffer

5th 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$