[R] HexVal, BinVal functions

Got an idea for enhancing PureBasic? New command(s) you'd like to see?
User avatar
Le Soldat Inconnu
Enthusiast
Enthusiast
Posts: 306
Joined: Wed Jul 09, 2003 11:33 am
Location: France

[R] HexVal, BinVal functions

Post by Le Soldat Inconnu »

Hi,

Since long time, on french forum, we created this 2 functions :

- HexVal : to convert hex value string in decimal value
- BinVal : to convert binary value string in decimal value

it's complementary with Hex() and Bin() function

It's really useful, why don't add this in PB

The code, it's optimized to obtain the fastest function as possible.

Code: Select all

ProcedureDLL.l HexVal(Hex.s) ; Convertir une chaine hexadécimal en valeur numérique
  Protected Val.l
  MOV Ecx, Hex
  LEA Ebx, [TableValeurHex]
  MOV Edx, 0
  MOV Eax, 0
  
  ! EncoreChaineHex :
  MOV al, byte[Ecx]
  CMP al, 0
  JE FinChaineHex
  XLATB
  CMP Eax, $FF
  JE ErreurChaineHex
  ROL Edx, 4
  ADD Edx, Eax
  INC Ecx
  JMP EncoreChaineHex
  
  ! FinChaineHex :
  MOV Val, Edx
  ProcedureReturn Val
  
  ! ErreurChaineHex :
  ProcedureReturn - 1
  
  ! TableValeurHex :
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $00, $01, $02, $03, $04, $05, $06, $07, $08, $09, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $0A, $0B, $0C, $0D, $0E, $0F, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $0A, $0B, $0C, $0D, $0E, $0F, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
EndProcedure

ProcedureDLL.l BinVal(Bin.s) ; Convertir une chaine binaire en valeur numérique
  Protected Val.l
  MOV Ecx, Bin
  LEA Ebx, [TableValeurBin]
  MOV Edx, 0
  MOV Eax, 0
  
  ! EncoreChaineBin :
  MOV al, byte[Ecx]
  CMP al, 0
  JE FinChaineBin
  XLATB
  CMP Eax, $FF
  JE ErreurChaineBin
  ROL Edx, 1
  ADD Edx, Eax
  INC Ecx
  JMP EncoreChaineBin
  
  ! FinChaineBin :
  MOV Val, Edx
  ProcedureReturn Val
  
  ! ErreurChaineBin :
  ProcedureReturn - 1
  
  ! TableValeurBin :
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $00, $01, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
  ! DB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
EndProcedure
and here functions not optimized

Code: Select all

ProcedureDLL HexVal(Txt.s)
  Protected Val.l, n.l
  Txt = UCase(Txt)
  For n = 1 To Len(Txt)
    Val << 4 | FindString("123456789ABCDEF", Mid(Txt, n, 1), 1)
  Next
  ProcedureReturn Val
EndProcedure

ProcedureDLL BinVal(Txt.s)
  Protected Val.l
  For n = 1 To Len(Txt)
    If Mid(Txt, n, 1) = "1"
      Val << 1 | 1
    Else
      Val << 1
    EndIf
  Next
  ProcedureReturn Val
EndProcedure
Thanks
Last edited by Le Soldat Inconnu on Sun Apr 24, 2011 2:43 pm, edited 1 time in total.
LSI
User avatar
Demivec
Addict
Addict
Posts: 4260
Joined: Mon Jul 25, 2005 3:51 pm
Location: Utah, USA

Re: HexVal, BinVal functions

Post by Demivec »

These functions are already implemented using Val().

Code: Select all

Debug Val("$7D") ;hexadecimal to decimal)
Debug Val("%10") ;binary to decimal

@Edit: corrected typo.
Last edited by Demivec on Sun Apr 24, 2011 2:52 pm, edited 1 time in total.
User avatar
Le Soldat Inconnu
Enthusiast
Enthusiast
Posts: 306
Joined: Wed Jul 09, 2003 11:33 am
Location: France

Re: HexVal, BinVal functions

Post by Le Soldat Inconnu »

:D
never see this before

Nice, thanks
LSI
Post Reply