gibt es nicht.
Habe ich mir mal selber gemacht - nicht nur für Hex, sondern noch weitergehend - müsstest Du Dir also dann anpassen für Deine Belange:
Code: Alles auswählen
function int2code( nWert )
local cErg, nI, nJ, nL, nA, nZahl
local aMap := { { 10, "A" }, { 11, "B" }, { 12, "C" }, { 13, "D" }, { 14, "E" }, { 15, "F" },;
{ 16, "G" }, { 17, "H" }, { 18, "I" }, { 19, "J" }, { 20, "K" }, { 21, "L" },;
{ 22, "M" }, { 23, "N" }, { 24, "O" }, { 25, "P" }, { 26, "Q" }, { 27, "R" },;
{ 28, "S" }, { 29, "T" }, { 30, "U" }, { 31, "V" }, { 32, "W" }, { 33, "X" },;
{ 34, "Y" }, { 35, "Z" } }
nZahl := int( nWert )
if nZahl < 0
cErg := "0"
elseif nZahl < 10
cErg := str( nZahl, 1 )
elseif nZahl < 36
cErg := aMap[ ascan( aMap, { |a| a[ 1 ] == nZahl } ), 2 ]
else
cErg := ""
nL := Min( 10, len( alltrim( str( nZahl ) ) ) )
for nA := nL to 1 step - 1
nI := 36^( nA - 1 )
nJ := 0
do while nZahl >= nI
nZahl -= nI
nJ++
enddo
if nJ < 10
cErg += str( nJ, 1 )
else
cErg += aMap[ ascan( aMap, { |a| a[ 1 ] == nJ } ), 2 ]
endif
next
endif
return cErg
function code2int( cWert )
local nErg, nI, nJ, nL, nA, lF, nF
local aMap := { { 10, "A" }, { 11, "B" }, { 12, "C" }, { 13, "D" }, { 14, "E" }, { 15, "F" },;
{ 16, "G" }, { 17, "H" }, { 18, "I" }, { 19, "J" }, { 20, "K" }, { 21, "L" },;
{ 22, "M" }, { 23, "N" }, { 24, "O" }, { 25, "P" }, { 26, "Q" }, { 27, "R" },;
{ 28, "S" }, { 29, "T" }, { 30, "U" }, { 31, "V" }, { 32, "W" }, { 33, "X" },;
{ 34, "Y" }, { 35, "Z" } }
lF := .f.
if ( len( cWert ) == 1 ) .and. ( alltrim( str( val( cWert ) ) ) == cWert )
nErg := val( cWert )
else
nErg := 0
nL := Min( 10, len( cWert ) )
nL := len( cWert )
for nA := 1 to nL
nI := 36^( nL - nA )
nJ := 0
if alltrim( str( val( substr( cWert, nA, 1 ) ) ) ) == substr( cWert, nA, 1 )
nJ := val( substr( cWert, nA, 1 ) )
else
nF := ascan( aMap, { |a| a[ 2 ] == upper( substr( cWert, nA, 1 ) ) } )
if nF > 0
nJ := aMap[ nF, 1 ]
else
lF := .t.
endif
endif
nErg += ( nI * nJ )
next
endif
if lF
nErg := 0
endif
return int( nErg )