相关疑难解决方法(0)

C#中的C++联合

我正在将用C++编写的库翻译成C#,关键字"union"只存在一次.在结构中.

将它翻译成C#的正确方法是什么?它做了什么?它看起来像这样;

struct Foo {
    float bar;

    union {
        int killroy;
        float fubar;
    } as;
}
Run Code Online (Sandbox Code Playgroud)

c# c++ unions

70
推荐指数
3
解决办法
4万
查看次数

为什么固定大小的缓冲区(数组)必须是不安全的?

假设我想要一个7字节(或3或777)的值类型.

我可以这样定义:

public struct Buffer71
{
    public byte b0;
    public byte b1;
    public byte b2;
    public byte b3;
    public byte b4;
    public byte b5;
    public byte b6;
}
Run Code Online (Sandbox Code Playgroud)

定义它的一种更简单的方法是使用固定缓冲区

public struct Buffer72
{
    public unsafe fixed byte bs[7];
}
Run Code Online (Sandbox Code Playgroud)

当然第二个定义更简单.问题在于必须为固定缓冲区提供unsafe关键字.我知道这是使用指针实现的,因此不安全.

我的问题是为什么它必须是不安全的?为什么C#不能提供任意常量长度数组并将它们保存为值类型而不是使其成为C#引用类型数组或不安全缓冲区?

c# arrays unsafe fixed value-type

25
推荐指数
1
解决办法
6460
查看次数

标签 统计

c# ×2

arrays ×1

c++ ×1

fixed ×1

unions ×1

unsafe ×1

value-type ×1