我在使用FieldOffset与数组时遇到了一些问题。以下代码是一个示例,在这个示例中,它无法正确地工作:
[StructLayout(LayoutKind.Explicit)]
public struct IndexStruct {
[FieldOffset(0)]
public byte[] data;
[FieldOffset(0)]
public short[] idx16;
[FieldOffset(0)]
public int[] idx32;
}
如果我将名为“data”的数组设置为序列化的字节数组,然后尝试使用“idx16”字段检索shorts格式的数据,则索引仍然与byte[]对齐。这意味着idx161会获取数据中的第二个字节,而不是第二个16位字(即第2个和第3个字节)。如果我反过来,索引短整数而不是字节,则偏移对齐方式继承自源数据。我的问题是,有没有一种方法可以解决这个问题?我知道我可以通过乘以元素大小来补偿索引值,但是否还有其他方法? 这里是我在StackOverflow上找到的一个答案,但尝试使用该代码时发现它无法正常工作。使用以下代码在VS中进行单元测试,但没有成功:
[TestMethod()]
public void SumTest() {
float[] fArr = {2.0f, 0.5f, 0.0f, 1.0f};
MemoryStream ms = new MemoryStream();
for (int i = 0; i < fArr.Length; i++) {
ms.Write(BitConverter.GetBytes(fArr[i]), 0, sizeof(float));
}
byte[] buff = ms.ToArray();
double expected = 3.5f;
double actual = Sum(buff);
Assert.AreEqual(expected, actual);
}
提前致谢!