Titolo: Convertire da Base64 in Testo Ascii
Categoria: Codice |
|
Ultimo Aggiornamento: 27/06/04 |
Da un messaggio inviato da Pete Bozek al 4D Nug internazionale, decodifica in Ascii i dati di un blob in base Base64.
` Decode_Base64_Blob
` di Peter Bozek
` http://www.inforce.sk
C_POINTER($1;$pPassedBlob)
C_LONGINT($i;$iOffset;$iDest)
C_LONGINT($lValue;$lValue1;$lValue2;$lValue3;$lValue4)
C_LONGINT($temp;$temp2)
C_LONGINT($lBlobSize;$lEOLLength)
C_BLOB($oDecoding)
C_STRING(64;$encoding)
$pPassedBlob:=$1
$lBlobSize:=BLOB size($pPassedBlob->)
If ($lBlobSize>0)
$encoding:="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
$encoding:=$encoding+"abcdefghijklmnopqrstuvwxyz0123456789+/"
SET BLOB SIZE($oDecoding;0x00FF;0x0040)
For ($i;1;64)
$oDecoding{Ascii($encoding[[$i]])}:=$i-1
End for SET BLOB SIZE($pPassedBlob->;(($lBlobSize+3)\4)*4;0x0000)
$lBlobSize:=BLOB size($pPassedBlob->)
`ridimensionare il blob non dovrebbe essere necessario!
$iOffset:=0
$iDest:=0
While ($iOffset<$lBlobSize)
If ($oDecoding{$pPassedBlob->{$iOffset}}=0x0040) `non fa parte di uno stream
$iOffset:=$iOffset+1
Else `prende blocchi di 4 Byte
If ($iOffset<($lBlobSize-1))
$lValue:=BLOB to longint($pPassedBlob->;Macintosh byte ordering ;$iOffset)
$lValue1:=$lValue >> 0x0018
$lValue2:=($lValue >> 0x0010) & 0x00FF
$lValue3:=($lValue >> 0x0008) & 0x00FF
$lValue4:=$lValue & 0x00FF
$pPassedBlob->{$iDest}:=($oDecoding{$lValue1} << 2) | ($oDecoding{$lValue2} >> 4)
$iDest:=$iDest+1
$temp:=$oDecoding{$lValue3}
If ($temp<0x0040)
$pPassedBlob->{$iDest}:=($oDecoding{$lValue2} << 4) | ($temp >> 2)
$iDest:=$iDest+1
$temp2:=$oDecoding{$lValue4}
If ($temp2<0x0040)
$pPassedBlob->{$iDest}:=($temp << 6) | $temp2
$iDest:=$iDest+1
End if End if Else $iOffset:=$lBlobSize
End if End if End while If ($iDest>0)
SET BLOB SIZE($pPassedBlob->;$iDest)
End ifEnd if
Inviato da: Umberto Migliore |
|
Visite: 13656 |
Se accedi con utente e password, puoi aggiungere dei commenti.