2
public : array<Byte>^ Foo(array<Byte>^ data)

获取动态大小的托管数组

但是如何获得固定大小的托管字节数组?

我想强制 C# 用户向我发送 8 字节数组;并取回 8 个字节

风格:

public : Byte[8] Foo(Byte[8] data)

编辑:

任何人都可以解释为什么它在安全的情况下是不可能的吗?

4

3 回答 3

6

如果您想强制使用8 个字节......请考虑发送longorulong代替。老派,但它的工作原理。它还具有不需要对象(abyte[]是对象)的优点 - 它是纯值类型(在这种情况下是原始类型)

于 2012-12-10T09:37:52.547 回答
5

C# 不允许您这样做。您只需验证数组的长度,如果长度不是 8,则可能会引发异常。

此外,您的函数类型不能是Byte[8]; 您必须将其更改为Byte[].

于 2012-12-10T09:34:32.000 回答
4

您可以在结构内使用固定大小的缓冲区。不过,您需要将其置于不安全的块中。

unsafe struct fixedLengthByteArrayWrapper
{
    public fixed byte byteArray[8];
}

在 C++ 方面,您需要使用inline_array来表示这种类型。

正如 Marc 所说,使用固定大小的缓冲区并不有趣。您可能会发现进行运行时长度检查更方便。

于 2012-12-10T09:35:55.067 回答