Bin2Var
Serializa qualquer variavel AdvPL em string binaria (Var2Bin) e desserializa de volta (Bin2Var). Util pra cache em campo memo, fila persistente, transporte.
Assinatura: Bin2Var(cBinario) -> xValor | Var2Bin(xValor) -> cBinario
Retorna: Any
Dupla Var2Bin/Bin2Var e o jeito tradicional de serializar variaveis em AdvPL. Funciona com qualquer tipo: array multidimensional, objeto, etc.
Sintaxe
cBin := Var2Bin(xValor) // serializa
xVal := Bin2Var(cBin) // desserializaExemplo
// Gravar array complexo em campo memo:
aLista := { {"A", 1, .T.}, {"B", 2, .F.} }
cSerial := Var2Bin(aLista)
RecLock("ZZZ", .F.)
ZZZ->ZZZ_DADOS := cSerial // memo field
ZZZ->(MsUnlock())
// Reconstituir depois:
cSerial2 := ZZZ->ZZZ_DADOS
aListaRec := Bin2Var(cSerial2)
// aListaRec[1][1] == "A"Caso de uso: cache de processamento pesado
// Em vez de recalcular sempre, salva em cache (tabela ZZ1):
If !CachedExists(cChave)
aResult := CalcularPesado(...)
GravaCache(cChave, Var2Bin(aResult))
Else
aResult := Bin2Var(LeCache(cChave))
EndIfPegadinhas
- Formato proprietario: nao da pra ler fora do Protheus. Pra interoperabilidade, use JSON
- Versionamento: mudanca de release pode quebrar deserializacao de bin antigo
- Tamanho: cresce com a estrutura. Memo aguenta ate ~64KB padrao
- Objetos com referencia ciclica: pode dar loop ao serializar
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
cBinario | Character | sim | String binaria serializada |
Exemplos
Round-trip
cBin := Var2Bin(aDados)
aCopy := Bin2Var(cBin)