public : array<Byte>^ Foo(array<Byte>^ data)
获取动态大小的托管数组
但是如何获得固定大小的托管字节数组?
我想强制 C# 用户向我发送 8 字节数组;并取回 8 个字节
风格:
public : Byte[8] Foo(Byte[8] data)
编辑:
任何人都可以解释为什么它在安全的情况下是不可能的吗?
如果您想强制使用8 个字节......请考虑发送long
orulong
代替。老派,但它的工作原理。它还具有不需要对象(abyte[]
是对象)的优点 - 它是纯值类型(在这种情况下是原始类型)
C# 不允许您这样做。您只需验证数组的长度,如果长度不是 8,则可能会引发异常。
此外,您的函数类型不能是Byte[8]
; 您必须将其更改为Byte[]
.
您可以在结构内使用固定大小的缓冲区。不过,您需要将其置于不安全的块中。
unsafe struct fixedLengthByteArrayWrapper
{
public fixed byte byteArray[8];
}
在 C++ 方面,您需要使用inline_array
来表示这种类型。
正如 Marc 所说,使用固定大小的缓冲区并不有趣。您可能会发现进行运行时长度检查更方便。