double to byte array?? wieso so umständlich?
-
Hey mans,
ich will ein double in ein byte array mappen.. wieso geht das so umständilich mit c# ??
double test=34243.445; MemoryStream tee = new MemoryStream(); BinaryWriter teew = new BinaryWriter(tee); teew.Write((double)test); byte[] b= tee.ToArray();
in c/c++ würde das ja so easy gehen
double test=34243.445; unsigned char* p= (unsigned char*)&test;
geht sdas nich eleganter, schneller , perfomanter?
-
-
BorisDieKlinge schrieb:
ich will ein double in ein byte array mappen.. wieso geht das so umständilich mit c# ??
double test=34243.445; MemoryStream tee = new MemoryStream(); BinaryWriter teew = new BinaryWriter(tee); teew.Write((double)test); byte[] b= tee.ToArray();
Weil hier immer dasselbe rauskommt.
in c/c++ würde das ja so easy gehen
double test=34243.445; unsigned char* p= (unsigned char*)&test;
geht sdas nich eleganter, schneller , perfomanter?
Weil hier auf jeder Plattform etwas anderes rauskommt. Mach es in C++ so, dass das Ergebnis global identisch ist, und Du wirst viel mehr Code haben
-
ja das mit der Plattform stimmt schon.. und die
BitConverter.GetBytes( argument );
Variante ist die auch so platformunabhängig?
sowas geht nich oder?
object a= (double)1.5; object b= (int) 5; object c= (string) "Hello"; BitConverter.GetBytes(a); BitConverter.GetBytes(b); BitConverter.GetBytes(c);
also object in bytearray (byte[]) wandeln?
-
Wenn du unbedingt die Typsicherheit untergraben willst, dann vielleicht notfalls mit dem unsafe-Krams?
Und dir ist klar, dass im Fall von
object a = 1.5;
der Wert geboxt wird? Es ist also nicht soetwas, wie ein void-Zeiger solltest du das denken.
unsafe { var value = 1.5; var asBytePointer = (byte*)&value; }
Arrays oder Teile einer Klasse musst du erst festpinnen, damit es nicht vom GC während deiner Arbeit wild im Speicher rumgeschoben wird und deine Zeiger somit plötzlich ungültig würden:
unsafe { var array = new double[50]; fixed (double* address = array) { // hier benutzen } }