Jump to content
Fivewin Brasil

C para xHarbour


oribeiro

Recommended Posts

Pessoal,

Alguém, por favor, consegue converter essa função C para uso no xHarbour?

private static string ToBase64Hex(string value)
{
   int countChars = value.Length;
   byte[] bytes = new byte[countChars / 2];

  for(int i = 0; i < countChars; i+=2)
  {
     bytes[i / 2] = Convert.ToByte(value.Substring(i, 2), 16);
  }

  return Convert.ToBase64String(bytes);
}

 

Link to comment
Share on other sites

Eu utilizo assim :

#pragma BEGINDUMP

#define HB_OS_WIN_32_USED
#define _WIN32_WINNT 0x0400
#include <windows.h>
#include "hbapi.h"

HB_FUNC (GETDESKTOPREALTOP)
{
    RECT rect;
    SystemParametersInfo( SPI_GETWORKAREA, 1, &rect, 0 );

    hb_retni(rect.top);

}
HB_FUNC (GETDESKTOPREALLEFT)
{
    RECT rect;
    SystemParametersInfo( SPI_GETWORKAREA, 1, &rect, 0 );

    hb_retni(rect.left);

}

HB_FUNC (GETDESKTOPREALWIDTH)
{
    RECT rect;
    SystemParametersInfo( SPI_GETWORKAREA, 1, &rect, 0 );

    hb_retni(rect.right - rect.left);

}

HB_FUNC (GETDESKTOPREALHEIGHT)
{
    RECT rect;
       SystemParametersInfo( SPI_GETWORKAREA, 1, &rect, 0 );

    hb_retni(rect.bottom - rect.top);
}

#pragma ENDDUMP

Link to comment
Share on other sites

Bom dia João,

Obrigado pelo seu interesse em ajudar.

Deixa eu explicar o meu objetivo com esse algorítmo em C# :

Estou planejando as mudanças que virão na NF-e com a inclusão dos dados do desenvolvedor.

A primeira parte da conversão eu consegui com o comando: hb_sha1( codigo_exemplo ) que funciona perfeitamente e me retorna a chave "696bfa2de10ce17eaee3ea8123639867c82b8a0c" depois disso eu preciso converter essa chave para Base64 mas o problema é que o comando HB_Base64encode( "696bfa2de10ce17eaee3ea8123639867c82b8a0c" ) retorna "Njk2YmZhMmRlMTBjZTE3ZWFlZTNlYTgxMjM2Mzk4NjdjODJiOGEwYw==" e eu preciso que retorne "aWv6LeEM4X6u4+qBI2OYZ8grigw=". 

Achei num fórum esse algoritmo em C# que pega o resultado do HB_Base64encode() e gera o código que eu preciso, mas não estou conseguindo fazer essa rotina em xHarbour.

Você conhece alguma função que faça isso?

 

Link to comment
Share on other sites

Estou tentando fazer isso:

Passos necessários para geração do "hashCSRT" :

1) Concatenar o CSRT com a chave de acesso da NF-e/NFC-e que está sendo emitida.

CSRT: G8063VRTNDMO886SFNK5LDUDEI24XJ22YIPO

Chave de Acesso: 41180678393592000146558900000006041028190697

Concatenada: G8063VRTNDMO886SFNK5LDUDEI24XJ22YIPO41180678393592000146558900000006041028190697

2) Aplicar o algoritmo SHA-1 sobre o resultado da concatenação do passo 1, resultando em um string de 20 bytes hexadecimais.

Resultado: 696bfa2de10ce17eaee3ea8123639867c82b8a0c

3) Converter o resultado do passo anterior para Base64, resultando em uma string de 28 caracteres;

Resultado: aWv6LeEM4X6u4+qBI2OYZ8grigw=

4) Montar o grupo de identificação da empresa desenvolvedora do software (tag: infRespTec), com a tag "idCSRT" o identificador do CSRT utilizado para a geração do hash e a tag "hashCSRT" o resultado do passo 3.

Resultado:

Responsável Técnico da NF-e e NFC-e

Fonte: NT2018_005_v1_20

Link to comment
Share on other sites

Oscar, não chego no teu resultado, reveja sua função.

#include "FiveWin.ch"
	FUNCTION Main()
	   LOCAL CSRT    := "G8063VRTNDMO886SFNK5LDUDEI24XJ22YIPO"
   LOCAL cChave  := "41180678393592000146558900000006041028190697"
   LOCAL cConca  := SPACE(80)
   LOCAL cConca2 := SPACE(28)
   LOCAL cConca3 := SPACE(28)
	   //Concatenada: G8063VRTNDMO886SFNK5LDUDEI24XJ22YIPO41180678393592000146558900000006041028190697
   cConca := CSRT + cChave
	   ? cConca  //-> G8063VRTNDMO886SFNK5LDUDEI24XJ22YIPO41180678393592000146558900000006041028190697
	   cConca2 := HB_SHA1( cConca )
	   ? cConca2
	   cConca3 := HB_Base64Encode( cConca2, Len( cConca2 ) )
	   ? cConca3
	   ? HB_Base64Decode( cConca3 )  // correto o inverso.
	RETURN NIL

Link to comment
Share on other sites

Eita João,

Você me ajudou muito!

Só faltava colocar .T. como segundo parâmetro do hb_sha1().

// CRIAR HashCSRT //
wCSRT   := "G8063VRTNDMO886SFNK5LDUDEI24XJ22YIPO"
wChave  := "41180678393592000146558900000006041028190697"
codigo  := wCSRT + wChave
codigo1 := hb_sha1(codigo, .T.)     
codigo2 := HB_Base64encode(codigo1, Len(codigo1))
Msginfo( codigo1+chr(13)+chr(13)+"Modelo: aWv6LeEM4X6u4+qBI2OYZ8grigw="+chr(13)+chr(13)+"Gerado: "+codigo2, "HB_base64encode() -> Tamanho: "+str(len(codigo2)) )

Muito obrigado, mais uma vez.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...