FUNÇÃO BITRSHIFT()
Moderador: Moderadores
FUNÇÃO BITRSHIFT()
:-O
- Bom dia, amigos alguém saberia como traduzir os comandos abaixo para Harbour:
iLow := BITRSHIFT( iTamanho, 8 )
iHigh := BITAND( iTamanho, 255) + 2
Explico: Na geração do QRCode do extrato SAT estou fazendo alguma coisa errada:
iTamanho := Len( x_URL_QrCode ) + 3
iLow := MOD( iTamanho, 256 )
iHigh := iTamanho / 256 && Em Harbour/Clipper não temos DIV() por isso fiz assim ok
O QrCode é rejeitado pelo aplicativo de olho na nota, fiz o teste imprimindo um cupom no meu sistema com esse calculo, depois imprimi via acbr o mesmo xml e do Acbr passa certinho ou seja está errado algo na geração do QrCode e não no arquivo XML ou algo assim, revendo meus exemplos encontrei a base de onde montei minha geração do código que está em VB ou VFP mas... com certeza não traduzi corretamente as primeiras linhas BirtShift() e Bitand().
:'(
HASA
- Bom dia, amigos alguém saberia como traduzir os comandos abaixo para Harbour:
iLow := BITRSHIFT( iTamanho, 8 )
iHigh := BITAND( iTamanho, 255) + 2
Explico: Na geração do QRCode do extrato SAT estou fazendo alguma coisa errada:
iTamanho := Len( x_URL_QrCode ) + 3
iLow := MOD( iTamanho, 256 )
iHigh := iTamanho / 256 && Em Harbour/Clipper não temos DIV() por isso fiz assim ok
O QrCode é rejeitado pelo aplicativo de olho na nota, fiz o teste imprimindo um cupom no meu sistema com esse calculo, depois imprimi via acbr o mesmo xml e do Acbr passa certinho ou seja está errado algo na geração do QrCode e não no arquivo XML ou algo assim, revendo meus exemplos encontrei a base de onde montei minha geração do código que está em VB ou VFP mas... com certeza não traduzi corretamente as primeiras linhas BirtShift() e Bitand().
:'(
HASA
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
FUNÇÃO BITRSHIFT()
Chute:
Código: Selecionar todos
iLow := Mod( nTamanho, 255 )
iHigh := Int( nTamanho / 255 ) + 2
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
FUNÇÃO BITRSHIFT()
No original tem um +2 na segunda parte.
Não vi isso na sua rotina.
E também a segunda parte acredito que deva ser inteira, sem decimais.
Não vi isso na sua rotina.
E também a segunda parte acredito que deva ser inteira, sem decimais.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
FUNÇÃO BITRSHIFT()
José, achei esse código que traduzindo talvez seja o correto:
Código: Selecionar todos
Procedure ImprimirQrCode();
var
Arq : TextFile;
cCaracter, Linha : AnsiString;
I, iTam1, iTam2 : integer;
begin
AssignFile(Arq, 'COM1');
Rewrite(Arq);
Writeln(Arq, #27'@'#29#249#32#48);
for J := 1 to length(Linha) do
cCaracter := cCaracter + AnsiChar(chr(Ord(Linha[J])));
if (length(Linha) > 255) then
begin
iTam1 := length(Linha) mod 255;
iTam2 := length(Linha) div 255;
end
else
begin
iTam1 := length(Linha);
iTam2 := 0;
end;
Writeln(Arq, #27+ #97 +#49 + #1 + #29 + #107 + #81 + #0 + #0 + #4 + #2 + AnsiChar(chr(iTam1)) + AnsiChar(chr(iTam2)) + cCaracter);
CloseFile(Arq);
end;HASA
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
FUNÇÃO BITRSHIFT()
Não sei se ajuda:
hbwin.ch
hbwin.ch
Código: Selecionar todos
#define WIN_LOWORD( dw ) hb_bitAnd( dw, 0xFFFF )
#define WIN_HIWORD( dw ) hb_bitAnd( hb_bitShift( dw, -16 ), 0xFFFF )
Código: Selecionar todos
hbmk2 -find hb_bit
xhb.hbc (installed):
hb_bitIsSet()
xhb_bitAnd()
xhb_bitOr()
xhb_bitXor()
Harbour core (installed):
hb_bitAnd()
hb_bitNot()
hb_bitOr()
hb_bitReset()
hb_bitSet()
hb_bitShift()
hb_bitTest()
hb_bitXor()
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
FUNÇÃO BITRSHIFT()
Confunde a primeira postagem, o RShift, e aquele +2 no segundo cálculo, que nessa última rotina que postou não tem.
A impressão que tenho é que o número é traduzido pra dois bytes, igual acontece com algumas APIs do Windows.
Acho que esses da hbwin devem resolver.
A impressão que tenho é que o número é traduzido pra dois bytes, igual acontece com algumas APIs do Windows.
Acho que esses da hbwin devem resolver.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
FUNÇÃO BITRSHIFT()
Legal, vou testar, o outro exemplo em Delphi também vou tentar traduzir ok.
T+
HASA
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
FUNÇÃO BITRSHIFT()
Olhando a segunda rotina em Delphi:
iTam1 é o resto da divisão por 255
iTam2 é o inteiro da divisão por 255
Se o número for até 255, nem faz conta, coloca zero no iTam2, e já considera o número pra iTam1.
No final é o cálculo que coloquei, talvez só a ordem esteja invertida (e não tem o +2)
iTam1 é o resto da divisão por 255
iTam2 é o inteiro da divisão por 255
Se o número for até 255, nem faz conta, coloca zero no iTam2, e já considera o número pra iTam1.
No final é o cálculo que coloquei, talvez só a ordem esteja invertida (e não tem o +2)
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
FUNÇÃO BITRSHIFT()
Me chamou a atenção esta parte:
AnsiChar(chr(iTam1))
Não sei se a codepage pode interferir no resultado.
AnsiChar(chr(iTam1))
Não sei se a codepage pode interferir no resultado.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
FUNÇÃO BITRSHIFT()
José tentei compilar com Harbour 3.2 mas... não reconheceu a Hb_BITRSHIFT().
HASA
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
FUNÇÃO BITRSHIFT()
Hasa, veja se em FoxPró, é mais fácil para converter:
Abs.
Código: Selecionar todos
DECLARE INTEGER Accdd1 IN "Aas973.dll" STRING @St
DECLARE INTEGER Fddig1 IN "Aas973.dll" INTEGER D
#DEFINE AccM1 0x313628FA
#DEFINE AccM2 0x7F03F6E4
#DEFINE AccM3 0x6589E678
#DEFINE AccM4 0x1654265F
#DEFINE AccM5 0x066E3FE0
#DEFINE AccM6 0x7C1B0162
#DEFINE AccM7 0x7C5612EE
#DEFINE AccM8 0x62EDDCAD
#DEFINE AccM9 0x69DF0765
DO CallMf
PROCEDURE CallMf
DIMENSION AccA(100)
LOCAL AccR1, AccR2, AccR3, AccR4, AccNa, AccUr, AccTem, K, I
LOCAL St, Stt
LOCAL LicIn, LicType, TokenId1, TokenId2
LOCAL OrigDrive, DriveChar
OrigDrive = .F.
FOR I = 1 TO 100
AccA(I) = INT(RAND() * 0x7FFFFFFF)
ENDFOR
AccUr = 0
FOR I = 1 TO 99
K = BITXOR(AccA(1 + I), BITAND(0xFF, AccUr)) % 99
AccUr = BITXOR(AccA(1 + K), BITRSHIFT(AccUr, 8))
ENDFOR
AccUr = BITAND(0xFFFF, BITXOR(AccM6, AccUr))
K = Fddig1(0)
IF (K < 7)
?"No Key drive in the USB port"
ELSE
St = ""
FOR I = 1 TO 100
St = St + CHR(BITAND(AccA(I), 0xFF)) +;
CHR(BITAND(BITRSHIFT(AccA(I), 8), 0xFF)) +;
CHR(BITAND(BITRSHIFT(AccA(I), 16), 0xFF)) +;
CHR(BITAND(BITRSHIFT(AccA(I), 24), 0xFF))
ENDFOR
= Accdd1(@St)
FOR I = 1 TO 100
Stt = SUBSTR(St, 4*I - 3, 4)
AccA(I) = ASC(SUBSTR(Stt, 1, 1)) +;
BITLSHIFT(ASC(SUBSTR(Stt, 2, 1)), 8) +;
BITLSHIFT(ASC(SUBSTR(Stt, 3, 1)), 16) +;
BITLSHIFT(ASC(SUBSTR(Stt, 4, 1)), 24)
ENDFOR
AccNa = BITAND(BITXOR(AccA(100), AccM5), 1061109567)
AccR1 = BITXOR(AccM1, AccA(1 + BITAND(AccNa, 0xFF)))
AccR2 = BITXOR(AccM2, AccA(1 + BITAND(0xFF, BITRSHIFT(AccNa, 8))))
AccR3 = BITXOR(AccM3, AccA(1 + BITAND(0xFF, BITRSHIFT(AccNa, 16))))
AccR4 = BITXOR(AccM4, AccA(1 + BITAND(0xFF, BITRSHIFT(AccNa, 24))))
AccTem = BITXOR((AccR2 - INT(BITNOT(AccR1) / AccUr)), AccR3)
IF (AccR4 = (AccTem - AccUr))
OrigDrive = .T.
ELSE
?"NOT Original Drive"
ENDIF
ENDIF
IF OrigDrive
LicIn = 79 + (BITAND(0xFF, BITRSHIFT(AccNa, 24)) % 21)
K = AccA(LicIn)
I = BITXOR(K, AccA(1 + BITAND(AccNa, 0xFF)))
LicType = 0
IF (I = BITXOR(BITXOR(AccM1, AccM3), BITXOR(AccM4, AccM5)))
LicType = 1
ENDIF
IF (I = BITXOR(BITXOR(AccM1, AccM2), BITXOR(AccM4, AccM5)))
LicType = 2
ENDIF
TokenId1 = BITXOR(AccM7, AccA(2 + BITAND(0xFF, AccNa)))
TokenId2 = BITXOR(AccM8, AccA(2 + BITAND(0xFF, BITRSHIFT(AccNa, 8))))
K = (BITXOR(AccM8, AccM9) % 64) + 1
DriveChar = CHR(BITXOR(AccA(LicIn - 8), AccA(K)) + 65)
?"Original Drive: ", DriveChar
?
?"License Type = ", LicType
?"TokenId1 = ", TokenId1
?"TokenId2 = ", TokenId2
ENDIF
ENDPROC
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
FUNÇÃO BITRSHIFT()
Baseado nestes exemplos:
Voce pode usar:
Abs
Código: Selecionar todos
PROCEDURE Ascii2UTF8(pcString)
LOCAL cBuff, c, i, h, l
cBuff = ""
FOR i = 1 TO LEN(pcString)
c = ASC(SUBS(pcString,i,1))
IF c < 128
cBuff = cBuff + CHR(c)
ELSE
h = BITOR(BITRSHIFT(c,6),0xC0) // hb_bitOr( BitRShift(c,6),0xC0 )
Function similar to "BitRShift()" in harbour ??
l = BITOR(BITAND(c,0x3F),0x80) // hb_BITOR( hb_BITAND(c,0x3F),0x80)
cBuff = cBuff + CHR(h) + CHR(l)
ENDIF
ENDFO
R
RETURN cBuff
Código: Selecionar todos
* Basado en informacion de wikipedia:
* http://en.wikipedia.org/wiki/UTF-8
*
PROCEDURE UTF82Ascii(pcString)
LOCAL cBuff, i, nAsc, c
nAsc = 0
cBuff = ""
FOR i = 1 TO LEN(pcString)
*
c = ASC(SUBS(pcString,i,1))
IF c < 128
IF nAsc > 0
cBuff = cBuff + CHR(nAsc)
nAsc = 0
ENDIF
cBuff = cBuff + CHR(c)
ELSE
IF BITTEST(c,6)
nSize = BITRSHIFT(BITAND(c,0x60),5) // ??
nAsc = BITLSHIFT(BITCLEAR(BITCLEAR(c,7),6),6 * (nSize - 1)) // ??
ELSE
nAsc = BITOR(nAsc, BITCLEAR(BITCLEAR(c,7),6)) //
ENDIF
ENDIF
*
ENDFOR
RETURN cBuff
Código: Selecionar todos
hb_UTF8ToStr( cString )
hb_StrToUTF8( cString )
FUNÇÃO BITRSHIFT()
Kapi, na verdade o trama aqui é para conseguir imprimir o QRcode do SAT certinho, você tem alguma dica ?
HASA