Sviluppo4d.it
Sito indipendente di informazioni tecniche per sviluppatori 4th Dimension italiani  

Sviluppatori 4D

Utility 4D

Risorse 4D



4d logo
Naviga: Prev Next

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 if
End if


Inviato da: Umberto Migliore Visite: 13518

Se accedi con utente e password, puoi aggiungere dei commenti.


Accesso

User:
Pass: Accedi

Cerca

Se non trovi le informazioni che cerchi scrivi a aiuto@sviluppo4d.it

4D Principali

4D Discussioni

Faq random


Crediti

Dominio registrato da ZetaNet
Sito realizzato da Nexus srl
4D SQL 11.9.0 offerto da 4D & Italsoftware
Icone di FAMFAMFAM
Moderato da Umberto Migliore
307 utenti registrati

Pagina servita il 16/04/24 alle 12:50:06 Valid HTML 4.01! Valid CSS!

Mutuo Facile, iDigitalScout, iDigitalTags e altre app di Nexid srl per iPhone e iPad

Cidroid, distributore italiano lettori barcode per IOS Apple iPhone, iPod, iPad