Каким образом D можно написать это?

Я написал эту программу на C , а также на erlang

Для практики я попытался переписать на D. Друг также написал ее на D, но написал это по-другому

Шаги просты. Псевдокод:

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

Моя попытка 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

Кажется, я не могу просто использовать fread для arr. sizeof равен 16, и когда я перехожу к вычитающей части, это дает ошибку сегментации. Я не могу автоматически выделить статический массив или, по крайней мере, не знаю, как это сделать. Я также не могу использовать malloc, потому что он дает мне ошибки, когда я пытаюсь применить void *, когда я перебираю байты. Как бы вы это написали или что я мог бы сделать лучше?

5
задан Community 23 May 2017 в 11:48
поделиться