November 28, 2020, 11:37:16 AM

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

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] hex2dec by Blu_Matt [ 1+ years ago ]
« on: June 29, 2017, 12:28:42 AM »
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


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal