Base64DecoderBuffer()
Syntaxe
Resultat = Base64DecoderBuffer(*TamponSource, LongueurSource, *TamponDestination, LongueurDestination)Description
Décode un tampon codé en Base64.
Arguments
*TamponSource Le tampon contenant les données codées. LongueurSource La taille de la mémoire tampon d'entrée. *TamponDestination Le tampon de sortie où les données seront copiées. LongueurDestination La taille de la mémoire tampon de sortie. La mémoire tampon de sortie peut être jusqu'à 33% plus petite que le tampon d'entrée, avec une taille minimale de 64 octets.
Il est recommandé de faire un tampon légèrement plus grand, par exemple 30%, pour éviter les débordements.
Valeur de retour
Renvoie la longueur des données décodées en octets.
Exemple: Encodage & Décodage d'une variable texte
Exemple$ = "Voici une phrase !" Decoded$ = Space(1024) Encoded$ = Space(1024) Debug Base64EncoderBuffer(@Exemple$, StringByteLength(Exemple$), @Encoded$, StringByteLength(Encoded$)) Debug Encoded$ Debug Base64DecoderBuffer(@Encoded$, StringByteLength(Encoded$), @Decoded$, StringByteLength(Decoded$)) Debug Decoded$
Exemple: Encodage & Décodage d'une DataSection
DataSection TestDebut: Data.a $00, $01, $02, $03, $04, $05, $06, $07 Data.a $08, $09, $0A, $0B, $0C, $0D, $0E, $0F TestFin: EndDataSection Taille = (?TestFin - ?TestDebut) * 1.35 If Taille < 64 Taille = 64 EndIf *EncodeBuffer = AllocateMemory(Taille) Taille = Base64EncoderBuffer(?TestDebut, ?TestFin - ?TestDebut, *EncodeBuffer, MemorySize(*EncodeBuffer)) ChaineEncodee$ = PeekS(*EncodeBuffer, Taille, #PB_Ascii) Debug ChaineEncodee$ *DecodeBuffer = AllocateMemory(Taille) Taille = PokeS(*EncodeBuffer, ChaineEncodee$, StringByteLength(ChaineEncodee$, #PB_Ascii), #PB_Ascii|#PB_String_NoZero) Taille = Base64DecoderBuffer(*EncodeBuffer, Taille, *DecodeBuffer, MemorySize(*DecodeBuffer)) ShowMemoryViewer(*DecodeBuffer, Taille)
Exemple: Problème de décodage d'une variable texte déjà codé en Base64 par un logiciel externe
; Attention, il est délicat d'utiliser une variable pour décoder un texte ; déjà codé en Base64 par un logiciel externe (messagerie par exemple) Encoded$ = "Vm9pY2kgdW5lIHBocmFzZSAh" ;"Voici une phrase !", codée en Base64 utf8 Decoded$ = Space(1024) Debug Base64DecoderBuffer(@Encoded$, StringByteLength(Encoded$), @Decoded$, 1024) Debug Decoded$ ; ==> Affiche n'importe quoi ; Pour résoudre ce problème, suivre la procédure ci-dessous ; Différents exemples de textes déjà codés Encode_utf8$ = "Vm9pY2kgdW5lIHBocmFzZSBow6kgIQ0K" ;Voici une phrase hé !, codée en Base64 utf8 Encode_iso8859_1$ = "Vm9pY2kgdW5lIHBocmFzZSBo6SAhDQo=" ;Voici une phrase hé !, codée en Base64 iso8859_1$ Encode_ascii$ = "Vm9pY2kgdW5lIHBocmFzZSBoICENCg==" ;Voici une phrase hé !, codée en Base64 ascii Procedure.s Decode64(Texte64.s, Option=#PB_UTF8) Protected *in, *out Protected Resultat.s *in = Ascii(Texte64) ; Le texte codé en Base64 est supposé être en ascii pour PureBasic If *in <> 0 ; La mémoire tampon de sortie peut être jusqu'à 33% plus petite que le tampon d'entrée *out = AllocateMemory(MemoryStringLength(*in,#PB_Ascii) * 0.8) ; Ici nous prenons une valeur de 20% If *out <> 0 Base64DecoderBuffer(*in, MemorySize(*in), *out, MemorySize(*out)) ; Décodage... Resultat = PeekS(*out, -1, Option) ; Le résultat est transféré dans une variable FreeMemory(*out) EndIf FreeMemory(*in) EndIf ProcedureReturn Resultat EndProcedure Debug Decode64(Encode_utf8$) ; Affiche: Voici une phrase hé ! Debug Decode64(Encode_iso8859_1$, #PB_Ascii) ; Affiche: Voici une phrase hé ! (iso8859_1 est aussi appelée Latin-1 ou Europe occidentale et contient tous les caractères ascii) Debug Decode64(Encode_ascii$, #PB_Ascii) ; Affiche: Voici une phrase h ! (problème avec lettres accentuées...) ; car le codage Base64 ascii s'arrête au caractère ascii n°127
Voir aussi
Base64EncoderBuffer()
OS Supportés
Tous