• C# byte[] 如何转换成byte*



    目标:将byte[]转成byte*以方便使用memcpy

        [DllImport("kernel32.dll", EntryPoint = "RtlCopyMemory", CharSet = CharSet.Ansi)]
            public extern static long CopyMemory(IntPtr dest, IntPtr source, int size);

          private void butTemp_Click(object sender, EventArgs e)
            {
                unsafe
                {
                    byte[] by1 = new byte[4] { 1, 2, 3,4 };
                    IntPtr tempMemoryPointer = Marshal.AllocHGlobal(4);   
                    fixed (byte* converted = by1)
                    {
                        CopyMemory(tempMemoryPointer, new IntPtr(converted), 4);
                    }
                    byte* p1 = (byte*)tempMemoryPointer.ToPointer();
                    //此时p[0]到p[3]分别为: 1 2 3 4
                }
            }


    扩展目标:取int的地址以使用memcpy


    private void butTemp_Click(object sender, EventArgs e)
            {
                unsafe
                {
                    int iTmp = 0x11223344;
                    IntPtr tempMemoryPointer = Marshal.AllocHGlobal(4);
                    int* converted = &iTmp;
                    CopyMemory(tempMemoryPointer, new IntPtr(converted), 4);
                    byte* p1 = (byte*)tempMemoryPointer.ToPointer();
                    //此时p[0]到p[3]分别为: 0x44 0x33 0x22 0x11
                }
            }

    测试环境

    win7 + VS2022

  • 相关阅读:
    2022年中总结
    idea安装与配置【包含了idea中每一个英文字母的翻译和使用方法】
    【450. 删除二叉搜索树中的节点】
    Webpack浅记
    maven compile无效的标记: --release
    HTML基础标签
    人均年薪70万!华为项目经理具备了哪些能力
    运维就业现状怎么样?技能要求高吗?
    hyperf框架聚合查询多字段查询
    Web漏洞
  • 原文地址:https://blog.csdn.net/he_zhidan/article/details/132848608