I wrote this program in C y también in erlang¿Cuál es la forma D de escribir esto?
Para practicar Traté de volver a escribir en D. Un amigo también escribió en D, pero wrote it differently
Los pasos son simples. Pseudocódigo:
While not end of file:
X = Read ulong from file and covert to little endian
Y = Read X bytes from file into ubyte array
subtract 1 from each byte in Y
save Y as an ogg file
Mi intento D:
import std.file, std.stdio, std.bitmanip, std.conv, core.stdc.stdio : fread;
void main(){
auto file = File("./sounds.pk", "r+");
auto fp = file.getFP();
ulong x;
int i,cnt;
while(fread(&x, 8, 1, fp)){
writeln("start");
x=swapEndian(x);
writeln(x," ",cnt++,"\n");
ubyte[] arr= new ubyte[x];
fread(&arr, x, 1, fp);
for(i=0;i<x;i++) arr[i]-=1;
std.file.write("/home/fold/wak_oggs/"~to!string(cnt)~".ogg",arr);
}
}
Parece que no puedo usar fread en arr. sizeof es 16 y da una falla de segmentación cuando llego a la parte de resta. No puedo autoasignar una matriz estática, o al menos no sé cómo. Tampoco puedo usar malloc porque me da errores cuando intento lanzar el vacío * cuando recorro los bytes. ¿Cómo escribirías esto o qué podría hacer mejor?
¿seguro '& arr' apunta al primer elemento de la matriz? – hvd