PDA

View Full Version : Need a decimal to hex conv function?


ABC123

Stan Mathews
01-08-2002, 12:19 PM
Don't really know why I started trying to do this, but it seems to work.

Function in body of post and in attachment.

function dectohex as C(dec as N)

‘ By Stan Mathews
‘ Public domain 2002
‘ Last update 1/8/02

dectohex = "" ' Set value to return (null) if input test fails

if round(dec,0) dec
ui_msg_box("Invalid input","Hex conversion not defined for fractional values",UI_OK+UI_ATTENTION_SYMBOL)
end if

dim global manip[255] as N
dim global blb as C
dim global mess as n
mess = dec
blb = ""
i = 0
while (mess/16)> 1
i = i + 1
manip[i] = mod(mess,16)
mess = floor(mess/16)

end while

fstchar = case(mod(mess,16)=0,"0",mod(mess,16)=1,"1",mod(mess,16)=2,"2",mod(mess,16)=3,"3",mod(mess,16)=4,"4",mod(mess,16)=5,"5",mod(mess,16)=6,"6",mod(mess,16)=7,"7",mod(mess,16)=8,"8",mod(mess,16)=9,"9",mod(mess,16)=10,"A",mod(mess,16)=11,"B",mod(dec,mess)=12,"C",mod(mess,16)=13,"D",mod(mess,16)=14,"E",mod(mess,16)=15,"F")

if i > 0

for m = i to 1 step -1
blb = blb + case(manip[m]=0,"0",manip[m]=1,"1",manip[m]=2,"2",manip[m]=3,"3",manip[m]=4,"4",manip[m]=5,"5",manip[m]=6,"6",manip[m]=7,"7",manip[m]=8,"8",manip[m]=9,"9",manip[m]=10,"A",manip[m]=11,"B",manip[m]=12,"C",manip[m]=13,"D",manip[m]=14,"E",manip[m]=15,"F")
next m

end if

dectohex = fstchar + blb

end function

csda1
01-09-2002, 04:09 AM
Hi Stan,

This is a previous thread on Decimal to Hexadecimal conversion;

Dec2Hex routine thread


Below and attached is my slightly updated version from my previous version in that thread


function Dec2Hex as C(Number as N)
'function Dec2Hex as C(Number as N, Places as N) 'Alternative version with Places used
' Created by Computer Systems Design & Associates
' Copyright 2001 Computer Systems Design & Associates, All Rights Reserved
' Last Update: July 7, 2001

' Purpose: This function converts Decimal Numbers to HexaDecimal

' Input: Decimal Number to convert. It can be a fractional and negative as well.
' Places could be passed to set the maximum number of fractional digits to generate

' Output:Character string containing hexadecimal equivalent

' Errors:Places is negative or Number is not a number (blank number)

' Typical Usage:
' Dec2Hex(123)
' Dec2Hex(-123)
' Dec2Hex(123.45)
' Dec2Hex(-123.45)
' Dec2Hex(numeric_expression)

' Examples:
' Dec2Hex(1.234)

' Notes: None
'

' This contains the maximum number of fractional digits generated
' It could be an additional parameter in the function too (Or Optional in version 5)
places=5

' Set inital return value
Dec2Hex=""

If 0>=Places.or.Number=MATH_NAN
END
End If

' Compute the Integer portion
i=INT(ABS(number))
h=""
while i>0
h=SUBSTR("0123456789ABCDEF",MOD(i,16)+1,1)+h
i=INT(i/16)
END WHILE

' Compute the Fractional portion
p=0
i=ABS(number)-INT(ABS(number))
IF i>0.and.places>p
h=h+"."
while i>0.and.places>p
j=i*16
k=INT(j)
h=h+SUBSTR("0123456789ABCDEF",k+1,1)
i=j-k
p=p+1
END WHILE
END IF

' Add negative if less than 0
IF 0>number
h="-"+h
END IF

Dec2Hex=h

end function


Regards,

Ira J. Perlow
Computer Systems Design & Associates
csda@mediaone.net

Stan Mathews
01-09-2002, 05:04 AM
I searched the board for "hex" and didn't find anything, although I thought I remembered something.

Thanks,

Stan

Stan Mathews
01-09-2002, 05:08 AM
Correcting myself, I searched the Code Archve and didn't find anything. Your original post is in the Ver 4 board. should have checked there too.

Thanks again,

Stan