You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何获取byte[]数组中int类型的引用?

获取byte[]数组中int类型的引用实现方案

方法一:使用MemoryMarshal.Cast转换为Span

通过MemoryMarshal.Cast将byte数组直接转换为Span<int>,就能直接获取对应索引位置的int引用,无需不安全上下文:

class ClassFoo {
    private byte[] _data;

    public ref byte GetByteRef(int index) {
        return ref _data[index];
    }

    public ref int GetIntRef(int index) {
        int byteOffset = index * sizeof(int);
        // 校验索引合法性,避免越界或未对齐访问
        if (byteOffset + sizeof(int) > _data.Length)
            throw new ArgumentOutOfRangeException(nameof(index));

        Span<int> intSpan = MemoryMarshal.Cast<byte, int>(_data);
        return ref intSpan[index];
    } 
}

方法二:使用Unsafe.AsRef直接获取引用

通过Unsafe.AsRef方法,可以直接将指定位置的byte引用转换为int引用,同样无需unsafe关键字:

using System.Runtime.CompilerServices;

class ClassFoo {
    private byte[] _data;

    public ref byte GetByteRef(int index) {
        return ref _data[index];
    }

    public ref int GetIntRef(int index) {
        int byteOffset = index * sizeof(int);
        if (byteOffset + sizeof(int) > _data.Length)
            throw new ArgumentOutOfRangeException(nameof(index));

        return ref Unsafe.AsRef<int>(ref _data[byteOffset]);
    } 
}

注意事项

  • 必须确保byteOffset(即index * 4)是有效的,且加上int的字节长度后不超出数组范围,否则会引发越界异常。
  • 要保证内存对齐:虽然.NET允许非对齐访问,但可能会有性能损耗,建议确保byte数组的起始位置或访问偏移是int类型的对齐边界(通常是4字节)。

内容的提问来源于stack exchange,提问作者Jan Tajovsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 14:35:10