Ooops
September 20, 2021, 06:31:16

### Author Topic: [bb] hex2dec by Blu_Matt [ 1+ years ago ]  (Read 736 times)

#### BlitzBot

• Jr. Member
•  • Posts: 1 ##### [bb] hex2dec by Blu_Matt [ 1+ years ago ]
« on: June 29, 2017, 00:28:42 »
Title : hex2dec
Author : Blu_Matt
Posted : 1+ years ago

Description : The hexidecimal number can be in the Blitz format "\$ffff" or just vanilla "FFFF" format.  The function is case-insensitive.

Code :
Code: BlitzBasic
1. Function hex2dec%(hex_number\$)
2. ; Converts the supplied hex number into a decimal number
3. ; If hex_number isn't a valid hex number, then returns -1
4. ; written by Matt Burns (Blu_Matt / matt@blis.co.uk)
5.         Local the_hex\$=Upper(Trim(hex_number\$))         ; the hex number
6.         Local base_power%=0                                                     ; the current base power
7.         Local base%=16                                                          ; the base to convert from
8.         Local the_dec%=0                                                        ; the decimal representation
9.         Local chars%=0
10.         Local hex_length%=Len(the_hex\$)                         ; current length of the hex
11.         If Left(the_hex\$,1)="\$" Then                            ; removes any leading "\$"
12.                 the_hex\$=Right(the_hex\$,hex_length%-1)
13.         EndIf
14.         hex_length%=Len(the_hex\$)                                       ; current length of the hex
15.         Local chars_left%=hex_length%                           ; current number of chars left
16.         Local hex_left\$=the_hex\$                                        ; current hex left
17.         Repeat
18.                 current_hex\$=Right(hex_left\$,1)                 ; gets the current hex char
19.                 If ((Asc(current_hex\$)>=Asc("0")) And (Asc(current_hex\$)<=Asc("9"))) Then
20.                         hex_dec%=current_hex\$                           ; digit 0-9
21.                 ElseIf ((Asc(current_hex\$)>=Asc("A")) And (Asc(current_hex\$)<=Asc("F"))) Then
22.                         hex_dec%=Asc(current_hex\$)-55           ; char A-F
23.                 Else
24.                         Return -1                                                       ; found an illegal character, aborting...
25.                 EndIf
26.                 the_dec%=the_dec%+((base%^base_power%)*hex_dec%)        ; add the local hex digit to the total
27.                 base_power%=base_power%+1                               ; increase the base power
28.                 chars_left%=chars_left%-1                               ; reduce the number of chars left
29.                 hex_left\$=Left(hex_left\$,chars_left%)   ; sets the remainder
30.         Until chars_left%=0
31.         Return the_dec%                                                         ; return the result
32. End Function
33.
34. ; testing, 1, 2, 3...
35. Print hex2dec("\$ff") ; = 255
36. Print hex2dec("100") ; = 256