firex
AutoIT Гуру
- Сообщения
- 943
- Репутация
- 208
Код:
ConsoleWrite( _DecToString( Dec( "5DF3FFEF1" ) ) & @LF )
;#Return
;value=string
;@Extended - String len
Func _DecToString( $iDec, $iProv = 36, $iLen = 0, $sBase = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" ) ;2 - BN, 10 - DEC, 16 - HEX, 36 - 09AZ
Local $Idx, $IdxTo = 1, $iTmp = 1, $iExp, $aBase, $sStr_f
; ---
$aBase = StringSplit( $sBase, "" )
Select
Case $iProv < 2 Or $iProv > 36
Return SetError( 1, 0, 0 )
Case $aBase[0] < $iProv
Return SetError( 2, 0, 0 )
EndSelect
; *
While 1
$iTmp *= $iProv
If $iDec < $iTmp Then _
ExitLoop
$IdxTo += 1
WEnd
For $Idx = $IdxTo To 1 Step -1
$iExp = $iProv^$Idx
$iTmp = Int( Mod( $iDec + $iExp, $iExp ) / ( $iExp / $iProv ) )
$sStr_f &= $aBase[$iTmp + 1]
Next
; *
If $iLen Then
$sStr_f = StringRight( $sStr_f, $iLen )
For $Idx = 1 To $iLen - StringLen( $sStr_f ) Step 1
$sStr_f = "0" & $sStr_f
Next
EndIf
; *
Return SetError( 0, $IdxTo, $sStr_f )
EndFunc
Хотелось бы по возможности увидеть более "лучшие" варианты (так как писал сам), ибо ранее не приходилось вручную переводить в другие системы счисления (главным образом не устраивает текущая скорость).