Cześć, mam tablicę float teoretycznie 3D, w praktyce, to: [x, y, 0].
x i y <0, 99>
Takich tablic jest 8(w jednym obiekcie). Chcę to wszystko zapisać ciągiem do jednego bufora:
unsafe
{
byte[] s = new byte[sizeof(float)*8* 100 * 100];
byte[] buffer = new byte[sizeof(float)* 100 * 100];
for (int i = 0; i < 8; i++)
{
fixed (float* p = &er.EigenImages[i].Data[0, 0, 0]) //początek itej tablicy
{
IntPtr ptr = (IntPtr)p;
Marshal.Copy(ptr, buffer, 0, buffer.Length);
}
Array.Copy(buffer, 0, s, sizeof(float) * i * 100 * 100, buffer.Length);
}
Tak to wg mnie powinno wyglądać. No, tylko jest pewien problem.
Gdy zapisuję taki bufor na dysk, utworzony plik ma odpowiedni rozmiar(320 000 B), ale ostatnie 40 000B to zera(NULL). Tymczasem w żadnej tablicy nie ma żadnego zera.
Co dziwniejsze, jeśli tworzę sobie bufor w iteracji:
float[] vectors = new float[8 * 100* 100];
int sum = 0;
for (int i = 0; i < 8; i++) //dla każdej tablicy
{
for (int j = 0; j < 100; j++) //każdy row
for (int k = 0; k < 100; k++) //każda kolumna
{
vectors[sum] = er.EigenImages[i].Data[j, k, 0];
sum++;
}
}
to jest to samo. Czy ja coś tu robię źle, czy czegoś nie rozumiem?
Zapis do pliku:
//bufor z iteracji
using (BinaryWriter bw = new BinaryWriter(File.Open("D:\\test.bin", FileMode.Create)))
{
foreach(float f in vectors)
{
bw.Write(f);
}
bw.Close();
}
//bufor z kopiowania pamięci:
using (BinaryWriter bw = new BinaryWriter(File.Open("D:\\test_str.bin", FileMode.Create)))
{
bw.Write(s);
bw.Close();
}