Thyago,
Não existe nada nativo em ADVPL ou já pronto na LIB do Protheus que faça isso.
Eu respondi há poucos dias atrás uma pergunta muito semelhante, veja o exemplo:
//-------------------------------------------------------------------
/*/{Protheus.doc} u_testBytesFile
Função para testes das demais funções de conversão de arquivo para
array (byte e binário)
@author Daniel Mendes
@since 21/07/2020
@version 1.0
/*/
//-------------------------------------------------------------------
function u_testBytesFile()
local cFile as char
local aBytes as array
local aBinary as array
local aBytesZeros as array
cFile := "mypdf.pdf"
aBytes := u_file2ArraryByte(cFile)
aBinary := u_file2BinaryArray(cFile)
aBytesZeros := u_file2ByteArray(cFile)
writeFile("advpl-bytes.txt", aBytes)
writeFile("advpl-binary.txt", aBinary)
writeFile("advpl-bytes-zero.txt", aBytesZeros)
cleanArray(@aBytes)
cleanArray(@aBinary)
cleanArray(@aBytesZeros)
return
//-------------------------------------------------------------------
/*/{Protheus.doc} writeFile
Cria um arquivo com base no nome e array de valores recebido
@param cFile Arquivo que será criado
@param aValues Array contendo os dados para a escrita
@author Daniel Mendes
@since 21/07/2020
@version 1.0
/*/
//-------------------------------------------------------------------
static function writeFile(cFile as char, aValues as array)
local nHandle as numeric
nHandle := FCreate(cFile)
AEval(aValues,{|cValue| FWrite(nHandle, cValue)})
FClose(nHandle)
return
//-------------------------------------------------------------------
/*/{Protheus.doc} cleanArray
Limpa o conteúdo do array recebido
@param aArray Array que será limpo
@author Daniel Mendes
@since 21/07/2020
@version 1.0
/*/
//-------------------------------------------------------------------
static function cleanArray(aArray as array)
aSize(aArray, 0)
aArray := nil
return
//-------------------------------------------------------------------
/*/{Protheus.doc} u_file2ArraryByte
Converte o arquivo recebido para um array de bytes
@param cFile Arquivo que será convertido para o array de bytes
@param aBytes Array contendo os dados em bytes
@author Daniel Mendes
@since 21/07/2020
@version 1.0
/*/
//-------------------------------------------------------------------
function u_file2ArraryByte(cFile as char) as array
local cByte as char
local aBytes as array
local nLoop as numeric
local nLength as numeric
local nHandle as numeric
nHandle := openFileSize(cFile, @nLength)
aBytes := {}
for nLoop := 1 to nLength
cByte := FReadStr(nHandle, 1)
cByte := cValToChar(Asc(cByte))
aAdd(aBytes, cByte)
next
FClose(nHandle)
return aBytes
//-------------------------------------------------------------------
/*/{Protheus.doc} u_file2ByteArray
Converte o arquivo recebido para um array de bytes
@param cFile Arquivo que será convertido para o array de bytes com zeros
@param aBytes Array contendo os dados em bytes, com zeros a esquerda
@author Daniel Mendes
@since 21/07/2020
@version 1.0
/*/
//-------------------------------------------------------------------
function u_file2ByteArray(cFile as char) as array
local cByte as char
local aBytes as array
local nLoop as numeric
local nLength as numeric
local nHandle as numeric
nHandle := openFileSize(cFile, @nLength)
aBytes := {}
for nLoop := 1 to nLength
cByte := FReadStr(nHandle, 1)
cByte := StrZero(Asc(cByte), 3)
aAdd(aBytes, cByte)
next
FClose(nHandle)
return aBytes
//-------------------------------------------------------------------
/*/{Protheus.doc} u_file2BinaryArray
Converte o arquivo recebido para um array de binários
@param cFile Arquivo que será convertido para o array de binários
@return aBynary Array contendo os dados em valores binários
@author Daniel Mendes
@since 21/07/2020
@version 1.0
/*/
//-------------------------------------------------------------------
function u_file2BinaryArray(cFile as char) as array
local cBinary as char
local aBynary as array
local nLoop as numeric
local nLength as numeric
local nHandle as numeric
nHandle := openFileSize(cFile, @nLength)
aBynary := {}
for nLoop := 1 to nLength
cBinary := FReadStr(nHandle, 1)
cBinary := Bin2Str(cBinary)
cBinary := StrTran(cBinary, " ", "0")
cBinary := StrTran(cBinary, "x", "1")
aAdd(aBynary, cBinary)
next
FClose(nHandle)
return aBynary
//-------------------------------------------------------------------
/*{Protheus.doc} openFileSize
Função auxiliar para abrir o arquivo e descobrir o seu tamanho
@param cFile Arquivo que será aberto
@param nLength Tamanho do arquivo [Referência]
@param nHandle Handle do arquivo aberto
@author Daniel Mendes
@since 21/07/2020
@version 1.0
*/
//-------------------------------------------------------------------
static function openFileSize(cFile as char, nLength as numeric) as numeric
local nHandle as numeric
nHandle := FOpen(cFile, FO_READ+FO_SHARED)
nLength := FSeek(nHandle, 0, FS_END)
FSeek(nHandle, 0)
return nHandle
Talvez lhe ajude, ou ao menos lhe dê um norte de como pode ser feito.
https://devforum.totvs.com.br/1201-arquivo-binario-em-array-de-bytes