固定大小的字节数组

时间:2012-12-10 09:29:29

标签: c# .net c++-cli

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

获取动态大小托管数组

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

我想强迫C#用户向我发送8字节数组;并获得8个字节

式:

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

修改

可以解释为什么它在安全环境中的不可思议性吗?

3 个答案:

答案 0 :(得分:6)

如果你想强制正好是8个字节......请考虑发送longulong。老派,但它的确有效。它还具有不需要对象的优点(byte[]是一个对象) - 它是一个纯值类型(在这种情况下是一个原语)

答案 1 :(得分:3)

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

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

答案 2 :(得分:3)

您可以在结构中使用fixed size buffer。但是你需要它在一个不安全的区域。

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

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

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