FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour HB_Base64Decode en xHarbour
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
HB_Base64Decode en xHarbour
Posted: Fri Jul 21, 2017 11:17 PM

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

Posts: 257
Joined: Mon Jun 10, 2013 06:40 PM
Re: HB_Base64Decode en xHarbour
Posted: Sat Jul 22, 2017 05:31 PM

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.

Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: HB_Base64Decode en xHarbour
Posted: Sun Jul 23, 2017 04:20 AM

Te agradezco,,, aquí esta bien,. así sirve a quien lo requiera
Gracias..

Posts: 257
Joined: Mon Jun 10, 2013 06:40 PM
Re: HB_Base64Decode en xHarbour
Posted: Sun Jul 23, 2017 03:19 PM
Espero y el Dueño no se moleste
y tambien que te funcione.

Code (fw): Select all Collapse
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. )


Saludos.
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: HB_Base64Decode en xHarbour
Posted: Mon Jul 24, 2017 02:19 PM
Code (fw): Select all Collapse
#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


Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: HB_Base64Decode en xHarbour
Posted: Mon Jul 24, 2017 02:40 PM
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
Re: HB_Base64Decode en xHarbour
Posted: Wed Dec 18, 2019 09:59 PM
karinha wrote:
Code (fw): Select all Collapse
#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


Saludos.


pero en que libreria esta?
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: HB_Base64Decode en xHarbour
Posted: Thu Dec 19, 2019 05:25 PM
tanto en harbour con en xharbour, por favor incluya esta linea
Code (fw): Select all Collapse
#include "hbcompat.ch"

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.
Code (fw): Select all Collapse
#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>)
....


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.
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)

Continue the discussion