目标:将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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
2021-09-25 性能和可测试性的选择