固定大小的字节数组

Nah*_*hum 2 .net c# c++-cli

public : array<Byte>^ Foo(array<Byte>^ data)
Run Code Online (Sandbox Code Playgroud)

获取动态大小托管数组

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

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

样式:

public : Byte[8] Foo(Byte[8] data)
Run Code Online (Sandbox Code Playgroud)

编辑:

任何人都可以解释为什么它在安全环境中的不可能性?

Nek*_*eko 7

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

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


Dav*_*nan 6

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

unsafe struct fixedLengthByteArrayWrapper
{
    public fixed byte byteArray[8];
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • @NahumLitvin 重点是;“固定”缓冲区***不是数组***;尽管语法可能相似,但您不能将它们视为数组。每次接触“固定”缓冲区时,您都需要**“不安全”*和*“固定”语句(它执行隐式引脚,IIRC)。“固定”缓冲区在某些情况下非常有用,但我个人会将它们保留为实现细节,而不是 API 的一部分 (2认同)

Mar*_*ell 6

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