I wrote this program in C và cũng in erlangCách D để viết điều này là gì?
Để thực hành tôi đã cố gắng để viết lại trong D. Một người bạn cũng đã viết nó trong D nhưng wrote it differently
Các bước thực hiện đơn giản. Giả:
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
nỗ lực D của tôi:
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);
}
}
Dường như tôi không thể chỉ cần sử dụng fread trên arr. sizeof là 16 và nó cho lỗi phân đoạn khi tôi đến phần trừ. Tôi không thể tự động phân bổ một mảng tĩnh, hoặc ít nhất là tôi không biết làm thế nào. Tôi cũng không thể sử dụng malloc vì nó mang lại cho tôi lỗi khi tôi cố gắng bỏ khoảng trống * khi tôi lặp qua các byte. Làm thế nào bạn sẽ viết này, hoặc, những gì tôi có thể làm tốt hơn?
bạn có chắc chắn '& arr' điểm tới phần tử đầu tiên của mảng? – hvd