Hola amigos.
Esta función HB_Base64Decode() no existe en xHarbour, o que LIb debo enlazar??
trabajo con xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 9445) y con Borland C++ 5.82 for Win32
Salu2
HB_Base64Decode en xHarbour
- Willi Quintana
- Posts: 859
- Joined: Sun Oct 09, 2005 10:41 pm
- Location: Cusco - Perú
- Contact:
-
- Posts: 188
- Joined: Mon Jun 10, 2013 6:40 pm
Re: HB_Base64Decode en xHarbour
Encontre en el foro unas funciones (no se de quien son)
y para lo que necesite me funcionaron, si las quieres te las pongo aqui.
y para lo que necesite me funcionaron, si las quieres te las pongo aqui.
- Willi Quintana
- Posts: 859
- Joined: Sun Oct 09, 2005 10:41 pm
- Location: Cusco - Perú
- Contact:
Re: HB_Base64Decode en xHarbour
Te agradezco,,, aquí esta bien,. así sirve a quien lo requiera
Gracias..
Gracias..
-
- Posts: 188
- Joined: Mon Jun 10, 2013 6:40 pm
Re: HB_Base64Decode en xHarbour
Espero y el Dueño no se moleste
y tambien que te funcione.
Saludos.
y tambien que te funcione.
Code: Select all
FUNCTION StrToBase64( cTexte )
*******************
* Conversion en base 64 de la chaine cTexte
* Un alphabet de 65 caractères est utilisé pour permettre la représentation de 6 bits par caractère :
* "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
* Le '=' (65e caractère) est utilisé dans le processus de codage pour les caractères finaux.
LOCAL cTexte64 := ""
LOCAL X
LOCAL cHex
DO WHILE !( cTexte == "" )
cHex := ""
* Le processus de codage représente des groupes de 24 bits de données en entrée par une chaîne en sortie de 4 caractères codés.
* En procédant de gauche à droite, un groupe de 24 bits est créé en concaténant 3 octets (8 bits par octet).
FOR X := 1 TO 3
* Conversion de chaque caractère en chaine binaire de 8 octets
cHex += CarToBin( LEFT(cTexte, 1) )
IF LEN(cTexte) > 1
cTexte := SUBSTR(cTexte, 2)
ELSE
cTexte := ""
EXIT
ENDIF
NEXT X
* Ces 24 bits (ici contenus dans cHex, ou au moins un multiple) sont traités comme 4 groupes concaténés de 6 bits chacun convertis
* en un unique caractère dans l'alphabet de la base 64.
* Chaque groupe de 6 bits est utilisé comme index dans la table des caractères de la base 64.
* Le caractère référencé par l'index correspondant est utilisé comme codage de ce groupe de 6 bits.
FOR X := 1 TO 4
IF SUBSTR(cHex, ( (X - 1) * 6) + 1 ) == ""
cTexte64 += REPLICATE("=", 4 - X + 1)
EXIT
ELSE
* Un traitement spécial est effectué si moins de 24 bits sont disponibles à la fin des données
* à coder. Aucun bit ne restant non-codé,
* si moins de 24 bits sont disponibles alors des bits à zéro sont ajoutés à la droite des données
* pour former un nombre entier de groupes de 6 bits.
IF LEN( cHex ) % 6 > 0
* Ajout des bits à zéro
cHex += REPLICATE("0", 6 - ( LEN( cHex ) % 6 ) )
ENDIF
cTexte64 += Carac64( "00" + SUBSTR(cHex, ( (X - 1) * 6) + 1, 6 ) )
ENDIF
NEXT X
ENDDO
RETURN cTexte64
*********************
FUNCTION Base64ToStr( cTexte64 )
*********************
* décodage dun texte codé en base 64
LOCAL cTexte := ""
LOCAL X
LOCAL cHex
LOCAL cCar
DO WHILE !( cTexte64 == "" )
try
cCar := LEFT(cTexte64,4)
catch
end
cHex := ""
try
FOR X := 1 TO 4
IF SUBSTR(cCar, X, 1 ) != "="
cHex += Hex64( SUBSTR(cCar, X, 1 ) )
ELSE
EXIT
ENDIF
NEXT X
catch
end
FOR X := 1 TO 3
IF SUBSTR(cHex, ( (X - 1) * 8) + 1 ) == ""
EXIT
ELSE
cTexte += BinToCar( SUBSTR(cHex, ( (X - 1) * 8) + 1, 8 ) )
ENDIF
NEXT X
IF LEN(cTexte64) > 4
cTexte64 := SUBSTR(cTexte64, 5)
ELSE
cTexte64 := ""
ENDIF
ENDDO
RETURN cTexte
****************
FUNCTION Carac64( cBin )
****************
* Renvoie le caractère correspondant en base 64
LOCAL nPos := ASC( BinToCar( @cBin ) ) + 1
RETURN SUBSTR( "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", nPos, 1)
**************
FUNCTION Hex64( carac64 )
**************
* Renvoie le caractère correspondant en base 64
LOCAL cCodeAsc := CHR( AT(carac64, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" ) -1 )
RETURN SUBSTR( CarToBin( @cCodeAsc ) , 3, 6)
*****************
FUNCTION CarToBin( carac, lInverse )
*****************
* Renvoie le caractère correspondant dans une chaine binaire (composée de 0 et 1) de 8 bits
#define cHexa "0123456789ABCDEF"
#define aBin {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", ;
"1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" }
LOCAL cToHex
IF EMPTY( lInverse )
* Retourne la chaine binaire en ayant reçu le caractère ASCII
cToHex := str2Hex( carac )
RETURN aBin[ AT( LEFT(cToHex,1), cHexa ) ] + aBin[ AT( SUBSTR(cToHex,2), cHexa ) ]
ELSE
* Retourne le caractère ASCII en ayant reçu la chaine binaire
cToHex := SUBSTR(cHexa, ASCAN(aBin, LEFT(carac,4 ) ), 1 ) ;
+ SUBSTR(cHexa, ASCAN(aBin, SUBSTR(carac,5,4 ) ), 1 )
RETURN Hex2str( cToHex )
ENDIF
RETURN NIL
*****************
FUNCTION BinToCar( cBin )
*****************
RETURN CarToBin( @cBin, .T. )
Re: HB_Base64Decode en xHarbour
Code: Select all
#include "FiveWin.ch"
FUNCTION Main()
LOCAL cString := "xOraClip"
LOCAL cBase64 := HB_Base64Encode( cString, Len( cString ) )
// xHarbour:
? cBase64 // result: eEhhcmJvdXI==
? HB_Base64Decode( cBase64 ) // result: xOraClip
RETURN NIL
// fin
João Santos - São Paulo - Brasil
Re: HB_Base64Decode en xHarbour
João Santos - São Paulo - Brasil
- goosfancito
- Posts: 1392
- Joined: Fri Oct 07, 2005 7:08 pm
Re: HB_Base64Decode en xHarbour
pero en que libreria esta?karinha wrote:Saludos.Code: Select all
#include "FiveWin.ch" FUNCTION Main() LOCAL cString := "xOraClip" LOCAL cBase64 := HB_Base64Encode( cString, Len( cString ) ) // xHarbour: ? cBase64 // result: eEhhcmJvdXI== ? HB_Base64Decode( cBase64 ) // result: xOraClip RETURN NIL // fin
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
- carlos vargas
- Posts: 1421
- Joined: Tue Oct 11, 2005 5:01 pm
- Location: Nicaragua
Re: HB_Base64Decode en xHarbour
tanto en harbour con en xharbour, por favor incluya esta linea
este archivo de cabecera tiene la redefinición de los nombre de un grupo de funciones que se llama de forma diferente en ambos compiladores, con lo cual se resuelve la mayoría de los mensaje de error de funciones no encontradas.
en el caso de harbour creo que ese archivo de cabecera esta en contrib\xhb por lo que deberan incluir también esa lib.
por lo menos en mi versión de harbour son funciones del core y en xharbour esta en tip.lib y se llaman de igual forma.
Code: Select all
#include "hbcompat.ch"
en el caso de harbour creo que ese archivo de cabecera esta en contrib\xhb por lo que deberan incluir también esa lib.
Code: Select all
#ifdef __XHARBOUR__
#if defined( __PLATFORM__Windows ) .AND. !defined( __PLATFORM__WINDOWS )
#define __PLATFORM__WINDOWS
#endif
#if defined( __PLATFORM__Linux ) .AND. !defined( __PLATFORM__LINUX )
#define __PLATFORM__LINUX
#endif
#xtranslate hb_ScrMaxRow() => gtInfo( HB_GTI_SCREENHEIGHT )
#xtranslate hb_ScrMaxCol() => gtInfo( HB_GTI_SCREENWIDTH )
#xtranslate MaxRow(.T.) => gtInfo( HB_GTI_SCREENHEIGHT )
#xtranslate MaxCol(.T.) => gtInfo( HB_GTI_SCREENWIDTH )
#xtranslate hb_dbPack() => __dbPack()
#xtranslate hb_dbZap() => __dbZap()
#xtranslate hb_dbDrop([<x,...>]) => dbDrop(<x>)
#xtranslate hb_dbExists([<x,...>]) => dbExists(<x>)
#xtranslate hb_FieldLen([<x>]) => FieldLen(<x>)
#xtranslate hb_FieldDec([<x>]) => FieldDec(<x>)
#xtranslate hb_FieldType([<x>]) => FieldType(<x>)
....
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
Carlos Vargas
Desde Managua, Nicaragua (CA)