Leer y Escribir archivo binario

Desarrollo de aplicaciones de escritorio C#, c++, Java, Net, VB... y todos los frameworks y tecnologías relacionadas co este tipo de aplicaciones.
Es posible replicar esta función en lua?

Código: Seleccionar todo

ASCIIEncoding aSCIIEncoding = new ASCIIEncoding();
            BinaryReader binaryReader = new BinaryReader(File.Open(path, FileMode.Open));
            int num = (int)binaryReader.BaseStream.Length - 19;
            byte[] array = binaryReader.ReadBytes(19);
            byte[] array2 = binaryReader.ReadBytes(num);
            binaryReader.Close();
            byte b = array[10];
            for (int i = 0; i < num; i++)
            {
                byte[] expr_8F_cp_0 = array2;
                int expr_8F_cp_1 = i;
                expr_8F_cp_0[expr_8F_cp_1] -= b;
                b += array2[i];
            }
buscando en github encontré un repo pero no tengo la menor idea si con las funciones que tiene puedo replicar la función de c#
en lua puedes hacer esto ya que lua no tiene mucha nocion del contenido dentro de un string, simplemente conoce la posicion y el tamaño, y no tiene porque ser null terminated.

el ejemplo que pones podria ser algo asi.

file = readfile(...)
arr1 = string.sub(file, 0, 19)
arr2 = string.sub(file, 19, #file)

si quieres acceder a los bytes independientes de algo usas string.byte(arr1[x]) o si quieres crear un array con un tamaño determinado, por ejemplo 5 elementos usas string.char(0,0,0,0,0).

En lua no son tipos completos pero puedes usarlos igualmente.
No entiendo si es un problema de lua 5.1 o tengo que pasar los datos por una función para convertir el encode, no tengo problema en leer otros archivos pero con este en concreto obtengo caracteres "raros", el contenido del archivo en concreto es esto
Imagen

Usando este código
Debug.ShowWindow(true);

local Stream = io.open(_SourceFolder.."\\sl.dta", "rb");
local Str = Stream:read("*a");
local Num = Str:len() - 19;--42 en total y 23 despues del -19 (Es el largo de la cadena: test 192.168.0.114 4020)

for i=1, Num do
	if(i+1 > Num)then
		break;
	else
		Debug.Print(string.char(string.byte(Str, i)));
	end
end

Stream:close();
Pero el resultante es

Imagen