首页 > 解决方案 > Unsafe.InitBlockUnaligned 的奇怪行为

问题描述

所以我试图用 填充一块内存Unsafe.InitBlockUnaligned,不幸的是它没有按预期工作。它不是用我指定的值填充我的内存块,而是使用完全不同的值。有人可以帮忙吗?

using System;
using System.Runtime.CompilerServices;

namespace Demo
{
    public class Class1
    {
        internal static unsafe void MemSet(void* dest, byte value, int byteCount)
        {
            Unsafe.InitBlockUnaligned(dest, value, (uint) byteCount);
        }

        public static unsafe void Main()
        {
            uint[] kim = new uint[10];
            kim[0] = 213;
            kim[1] = 213;
            kim[2] = 213;
            byte val = 50;

            MemSet((byte*) (uint*) Unsafe.AsPointer(ref kim[0]), val, 3 * Unsafe.SizeOf<uint>());
            Console.WriteLine(String.Join(", ", kim));
        }
    }
}

标签: c#pointersunsafe

解决方案


前 3 个值变为8421504500x32323232以十六进制表示。 500x32十六进制的。


推荐阅读