Tengo una pequeña pregunta sobre las estructuras con el conjunto de atributos LayoutKind.Explicit
. Declaré el struct
como puede ver, con un fieldTotal
con 64 bits, siendo fieldFirst
los primeros 32 bytes y fieldSecond
los últimos 32 bytes. Después de establecer fieldfirst
y fieldSecond
en Int32.MaxValue
, esperaría que fieldTotal
fuera , lo que en realidad no ocurre. ¿Por qué es esto? Sé que C# realmente no es compatible con las uniones C++, tal vez solo leerá bien los valores cuando interopera, pero cuando tratamos de establecer los valores nosotros mismos, ¿simplemente no lo manejaremos realmente bien?¿Cómo puedo simular una unión C++ en C#?
[StructLayout(LayoutKind.Explicit)]
struct STRUCT {
[FieldOffset(0)]
public Int64 fieldTotal;
[FieldOffset(0)]
public Int32 fieldFirst;
[FieldOffset(32)]
public Int32 fieldSecond;
}
STRUCT str = new STRUCT();
str.fieldFirst = Int32.MaxValue;
str.fieldSecond = Int32.MaxValue;
Console.WriteLine(str.fieldTotal); // <----- I'd expect both these values
Console.WriteLine(Int64.MaxValue); // <----- to be the same.
Console.ReadKey();
Además de lo que dicen Reed y Jared sobre firmado contra unsigned. –