Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 固定大小字节数组_C#_.net_C++ Cli - Fatal编程技术网

C# 固定大小字节数组

C# 固定大小字节数组,c#,.net,c++-cli,C#,.net,C++ Cli,编辑: 有人能解释为什么在安全的环境下它是不可能的吗?C#不允许你这样做。您只需验证数组的长度,如果长度不是8,可能会引发异常 此外,函数的类型不能是字节[8];您必须将其更改为Byte[]您可以在结构中使用。不过,你需要把它放在一个不安全的街区里 public : Byte[8] Foo(Byte[8] data) 在C++方面,您需要使用内联数组> /CODE>来表示这种类型。 正如Marc正确地说的,使用固定大小的缓冲区并不有趣。您可能会发现执行运行时长度检查更方便。如果您想强制执行8个

编辑:

有人能解释为什么在安全的环境下它是不可能的吗?

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

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

您可以在结构中使用。不过,你需要把它放在一个不安全的街区里

public : Byte[8] Foo(Byte[8] data)
<>在C++方面,您需要使用<代码>内联数组> /CODE>来表示这种类型。


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

如果您想强制执行8个字节。。。考虑发送<代码>长或<代码> ULUN < /代码>。旧学校,但它的工作。它还具有不需要对象的优点(一个
字节[]
是一个对象)-它是一个纯值类型(在本例中是一个原语)

固定的
缓冲区使用起来有点麻烦,但并不适用于所有平台/部署。我不明白为什么。修复数组大小似乎比创建动态数组和处理异常更容易,更不用说它不是静态可检查的了。@NahumLitvin重点是<代码>固定缓冲区不是数组;您不能将它们视为数组,即使语法可以相似。每次触摸
fixed
缓冲区时,您都需要
safe
fixed
语句(执行隐式pin,IIRC)
fixed
缓冲区在一些场景中可能非常有用,但我个人认为它们只是实现细节,而不是APIre编辑的一部分:“safe”C#根本没有“检查/验证长度的数组”的概念-如果你有一个方法,它接受一个
字节[]
,可能是
null
,0-length,或长度213341。一行检查很容易添加<代码>固定缓冲区具有已知/定义的长度,但它们不是数组。
public : Byte[8] Foo(Byte[8] data)
unsafe struct fixedLengthByteArrayWrapper
{
    public fixed byte byteArray[8];
}