Ahoj, zkouším si použití "unsafe struct" pro ukládání strukturovaných dat.
Co mám v tomto kódu špatně:
using System;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;
namespace StructTest1
{
class Program
{
static void Main(string[] args)
{
unsafe
{
TestData buf;
for (int i = 0; i < 6; i++) buf.head[i] = 0xFA;
buf.dataA[0] = 'A';
buf.dataA[1] = ':';
buf.dataB[0] = 'B';
buf.dataB[1] = ':';
// výstupní soubor vypadá takto:
// FA00 0000 0000 4100 0000 0000 4200 0000 0000
// očekával bych tento formát:
// FAFA FAFA FAFA 4100 3A00 0000 4200 3A00 0000
FileStream fs;
try
{
fs = new FileStream("vystup", FileMode.Create);
BinaryWriter w;
try
{
w = new BinaryWriter(fs, Encoding.Unicode);
int cnt = 0;
byte[] out_buf = getBytes(buf, out cnt);
w.Write(out_buf, 0, cnt);
w.Close();
}
catch (Exception)
{
Console.WriteLine("Chyba pri zapisu!");
}
finally
{
fs.Close();
}
}
catch (Exception)
{
Console.WriteLine("Do souboru nelze zapisovat!");
}
Console.WriteLine("stiskni enter pro ukonceni..\n");
Console.ReadKey();
}
}
private static byte[] getBytes(TestData str, out int count)
{
count = Marshal.SizeOf(str);
byte[] arr = new byte[count];
IntPtr ptr = Marshal.AllocHGlobal(count);
Marshal.StructureToPtr(str, ptr, true);
Marshal.Copy(ptr, arr, 0, count);
Marshal.FreeHGlobal(ptr);
return arr;
}
}
//-----------------------------------------------------------
internal unsafe struct TestData
{
public fixed byte head[6];
public fixed char dataA[3];
public fixed char dataB[3];
}
}
?
(Popis problému je v komentáři).