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$)