Convert a decimal number to hex

This script converts a decimal number to a hexadecimal number (returned as a string).

You can find the corresponding script file under Script_Examples, sub-directory of scripts.

 

'converts a decimal number to hex. The returned value is a string

 

function conv_digit$(dec_num)

local res$

 

if dec_num > 9 then

Select Case dec_num

Case 10

res$="A"

case 11

res$="B"

case 12

res$="C"

case 13

res$="D"

case 14

res$="E"

case 15

res$="F"

Case Else

msgbox("error")

stop

EndSelect

else

res$=str$(dec_num)

endif

conv_digit$=res$

endfunction

'-------------------------------------------------------------------------------

'function to convert positive decimals.

 

function conv_dec_hex_nosign$(decimal_val)

'local nb, res$, digit1,digit2,digit3,digit4,digit5,digit6,digit7,digit8

 

if decimal_val < 0 then

msgbox("No negative numbers please")

stop

endif

 

num=decimal_val

 

digit1=num & 15

digit2=(num & 240)/16

digit3=(num & 3840)/256

digit4=(num & 61440)/4096

digit5=(num & 983040)/65536

digit6=(num & 15728640)/1048576

digit7=(num & 251658240)/16777216

digit8=((num & 4026531840)/268435456)

res$=conv_digit$(digit8)+conv_digit$(digit7)+conv_digit$(digit6)+conv_digit$(digit5)+conv_digit$(digit4)+conv_digit$(digit3)+conv_digit$(digit2)+conv_digit$(digit1)

conv_dec_hex_nosign$=res$

endfunction

'------------------------------------------------------------------------------------

'function to convert signed decimals (80000000 - 00000000 - 7FFFFFFF)

' (most negative to most positive)

'Most Significant Bit in hexadecimal is the sign bit: 0 positive, 1 negative.

'For a negative number, we take the two's complement of the absolute value

 

function conv_dec_hex_sign$(decimal_val)

'local nb, negat, res$, digit1,digit2,digit3,digit4,digit5,digit6,digit7,digit8

 

if decimal_val < 0 then

negat=1

endif

 

num=decimal_val

 

'msgbox("decimal_val : "+str$(num))

 

digit1=num & 15

digit2=(num & 240)/16

digit3=(num & 3840)/256

digit4=(num & 61440)/4096

digit5=(num & 983040)/65536

digit6=(num & 15728640)/1048576

digit7=(num & 251658240)/16777216

if negat=0 then

digit8=((num & 4026531840)/268435456)

else

digit8=15-((num & 4026531840)/268435456)

endif

res$=conv_digit$(digit8)+conv_digit$(digit7)+conv_digit$(digit6)+conv_digit$(digit5)+conv_digit$(digit4)+conv_digit$(digit3)+conv_digit$(digit2)+conv_digit$(digit1)

conv_dec_hex_sign$=res$

endfunction

'*****************************************************************************

 

 

decimal_num=123456

 

b$=conv_dec_hex_sign$(decimal_num)

msgbox("Decimal value : "+str$(decimal_num)+"\n\Hex value : "+b$)