|
PROFESSIONAL NEWSGROUPS WINDEV, WEBDEV and WINDEV Mobile |
| | | | | |
Home → WINDEV 25 → WX - Compactar Hexadecimal (Modulo, Array e outras paradinhas...) |
WX - Compactar Hexadecimal (Modulo, Array e outras paradinhas...) |
Started by BOLLER, May, 18 2017 7:51 PM - 1 reply |
| |
| | | |
|
| |
Registered member 3,657 messages Popularité : +175 (223 votes) |
|
Posted on May, 18 2017 - 7:51 PM |
Prezados,
Compactar Hexadecimal (Modulo, Array e outras paradinhas...)
Procedure CompactarHexa(HexaDecimal)
HexaDecimal = BufferToHexa(HexaDecimal,4)
HexaDecimal = Replace(HexaDecimal," ","")
HexaDecimal = Replace(HexaDecimal,CRLF,"")
HexaDecimal = Replace(HexaDecimal,CR,"")
Pos, Contador, Ultimo is int = 0
ArrNewHexadecimal is array of string
HexaAtual, UltimoHexa is string = ""
nTotal is int = Length(HexaDecimal)
LOOP (nTotal) Pos += 1 IF Modulo(Pos,8) = 1 OR Modulo(Pos,8) = 8 THEN HexaAtual = Middle(HexaDecimal,Pos,8) IF UltimoHexa = HexaAtual THEN Contador += 1 Ultimo = ArrayCount(ArrNewHexadecimal) ArrNewHexadecimal[Ultimo] = "["+Contador+"]"+HexaAtual ELSE IF UltimoHexa <> HexaAtual THEN Contador = 1 Add(ArrNewHexadecimal,"["+Contador+"]"+HexaAtual) UltimoHexa = HexaAtual END END END
nRegistros is int = 0
HexadecimalSerializado is string = ""
QtdeHexadecimalSuprimida is int = ArrayCount(ArrNewHexadecimal)
LOOP (QtdeHexadecimalSuprimida) nRegistros += 1 HexadecimalSerializado += ArrNewHexadecimal[nRegistros] END
RESULT HexadecimalSerializado
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/Message modified, May, 18 2017 - 8:03 PM |
| |
| |
| | | |
|
| | |
| |
Registered member 3,657 messages Popularité : +175 (223 votes) |
|
Posted on May, 18 2017 - 9:51 PM |
Exemplo CompactarHexadecimal do Boller
Pego um arquivo (doc, jpg,....) 1- converto para base64 2 -depois para hexa 3 - aplico a minha tecnica acima 4 - zipo 5 - transmito pelo webservie e faço o inverso na outra ponta
é baseado em um arquivo binário que foi convertido para BASE64 para evitar caracteres inválidos e gerou isso aqui:
E011CFD0 E11AB1A1 00000000 00000000 00000000 00000000 0003003E 0009FFFE 00000006 00000000 00000000 00000004 000001AE 00000000 00001000 000001B0 00000001 FFFFFFFE 00000000 000001AA 000001AB 000001AC 000001AD FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00C1A5EC 0416E063 12F80000 000000BF 10000000 00000000 00000800 00000802 6A62000E AD3A6A62 0000AD3A
É igual a 1284 caracteres o length acima
Caso nao queira ter [1] é possivel reduzir ainda mais assim:
...
HexadecimalSerializado = Replace(HexadecimalSerializado,"[1]","")
RESULT HexadecimalSerializado
Sem essa linha da isso:
[1]E011CFD0[1]E11AB1A1[4]00000000[1]0003003E[1]0009FFFE[1]00000006[2]00000000[1]00000004[1]000001AE[1]00000000[1]00001000[1]000001B0[1]00000001[1]FFFFFFFE[1]00000000[1]000001AA[1]000001AB[1]000001AC[1]000001AD[105]FFFFFFFF[1]00C1A5EC[1]0416E063[1]12F80000[1]000000BF[1]10000000[1]00000000[1]00000800[1]00000802[1]6A62000E[1]AD3A6A62[1]0000AD3A
É igual a 343 caracteres o length acima
Com essa linha
HexadecimalSerializado = Replace(HexadecimalSerializado,"[1]","")
fica assim:
E011CFD0E11AB1A1[4]000000000003003E0009FFFE00000006[2]0000000000000004000001AE0000000000001000000001B000000001FFFFFFFE00000000000001AA000001AB000001AC000001AD[105]FFFFFFFF00C1A5EC0416E06312F80000000000BF100000000000000000000800000008026A62000EAD3A6A620000AD3A
É igual a 259 caracteres o length acima
Se se zipar de 259 vai para 196 bytes...
Todo binario é convertido facilmente em hexa, uma vez em hexa tem um padrão de repetições que agrupo com o cochete
[3]FFFFFFFF
é igual a
FFFFFFFF FFFFFFFF FFFFFFFF
a olho nu é visivel que a minha tecnica do cochete é menor
se tiver
[150]FFFFFFFF
é 150 x FFFFFFFF FFFFFFFF FFFFFFFFF FFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFF FFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFF FFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFF FFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFF FFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFF FFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFF FFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFF FFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFF FFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFF FFFFFFF FFFFFFFF....
Espero que ajude em suas aplicações esse exemplo.
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/Message modified, May, 18 2017 - 10:51 PM |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|