Ja, ich mach das nur weil es mir lustig ist
Ergibt:
Hmm. Ich frage mich, was wohl passiert, wenn man anfängt, mit Void zu experimentieren. Und mit Structures, die Referenzen beinhalten. Oder T nicht auf Structure beschränkt.
Edit: Ok, auch interessant.
Einfach mal die Adresse rausfischen:
Spoiler anzeigen
C#-Quellcode
- public static T Low<T>(ValueType Value) where T : struct
- {
- int TargetSize = Marshal.SizeOf(typeof(T));
- int SourceSize = Marshal.SizeOf(Value);
- if (TargetSize * 2 != SourceSize)
- {
- throw new Exception("Meldung und so");
- }
- var Buffer = Marshal.AllocHGlobal(SourceSize);
- Marshal.StructureToPtr(Value, Buffer, true);
- // Für High-Funktion Buffer + TargetSize
- var Result = Marshal.PtrToStructure(Buffer, typeof(T));
- Marshal.FreeHGlobal(Buffer);
- return (T)Result;
- }
C#-Quellcode
- ushort a = 0x3210;
- Console.WriteLine(High<byte>(a).ToString("X") + " : " + Low<byte>(a).ToString("X"));
- ulong b = 0xfedcba9876543210;
- Console.WriteLine(High<uint>(b).ToString("X") + " : " + Low<uint>(b).ToString("X"));
- System.Drawing.Point c = new System.Drawing.Point(123, 456);
- Console.WriteLine(High<int>(c).ToString() + " : " + Low<int>(c).ToString());
- System.Drawing.Rectangle d = new System.Drawing.Rectangle(12, 34, 56, 78);
- Console.WriteLine(High<System.Drawing.Size>(d).ToString() + " : " + Low<System.Drawing.Point>(d).ToString());
Ergibt:
32 : 10
FEDCBA98 : 76543210
456 : 123
{Width=56, Height=78} : {X=12,Y=34}
Hmm. Ich frage mich, was wohl passiert, wenn man anfängt, mit Void zu experimentieren. Und mit Structures, die Referenzen beinhalten. Oder T nicht auf Structure beschränkt.
Edit: Ok, auch interessant.
Einfach mal die Adresse rausfischen:
C#-Quellcode
- public static T ToSomething<T>(ValueType Value) where T : struct
- {
- int TargetSize = Marshal.SizeOf(typeof(T));
- int SourceSize = Marshal.SizeOf(Value);
- var Buffer = Marshal.AllocHGlobal(Math.Max(SourceSize, TargetSize));
- Marshal.StructureToPtr(Value, Buffer, true);
- var Result = Marshal.PtrToStructure(Buffer, typeof(T));
- Marshal.FreeHGlobal(Buffer);
- return (T)Result;
- }
- public class Bar
- {
- }
- public struct Foo
- {
- public Bar b;
- }
8149339529489022988
"Luckily luh... luckily it wasn't poi-"
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Niko Ortner“ ()