我如何在 D 中执行类似 memcpy 的操作

发布于 2024-12-02 15:26:53 字数 615 浏览 4 评论 0原文

我有一个内存位置 a,我想快速将一定数量的字节复制到另一个位置,我该如何在 D 中执行此操作?

例如我将如何做到这一点:

int main()
{
    void* src_data = 0x40001255;
    void* dst_data = 0x47F22000;
    u32 size = 0x200;
    memcpy(dst_data, src_data, size);
}

另外如何快速填充结构:

struct data_struct
{
    u32 block1;
    u32 block2;
    u32 block3;
    u32 block4;
    u32 block5;
    u62 block6;
    u128 bigblock;
} data_struct_t;

int main()
{
    void* src_data = 0x40001255;
    struct data_struct_t dst_data; 
    u32 size = sizeof(data_struct);
    memcpy(dst_data, src_data, size);
}

谢谢! 罗尔

I have a memory location a and I want to copy a certain amount of bytes to another location fast, how would I do this in D ?

For example how would i do this:

int main()
{
    void* src_data = 0x40001255;
    void* dst_data = 0x47F22000;
    u32 size = 0x200;
    memcpy(dst_data, src_data, size);
}

Also how would fill a struct fast:

struct data_struct
{
    u32 block1;
    u32 block2;
    u32 block3;
    u32 block4;
    u32 block5;
    u62 block6;
    u128 bigblock;
} data_struct_t;

int main()
{
    void* src_data = 0x40001255;
    struct data_struct_t dst_data; 
    u32 size = sizeof(data_struct);
    memcpy(dst_data, src_data, size);
}

Thanks!
Roel

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

烟雨凡馨 2024-12-09 15:26:53

分配给切片将执行数组复制,该复制在内部调用 memcpy。


void main()
{
    void* src_data = 0x40001255;
    void* dst_data = 0x47F22000;
    uint size = 0x200;
    dst_data[0..size] = src_data[0..size];
}

对于第二个:


struct data_struct
{
    uint block1, block2, block3, block4, block5;
    ulong block6;
    uint[4] bigblock;
}

void main()
{
    auto src_data = cast(data_struct*) 0x40001255; // unaligned, WTF?!
    auto dst_data = *src_data;
}

Assigning to a slice will perform an array copy, which calls memcpy internally.


void main()
{
    void* src_data = 0x40001255;
    void* dst_data = 0x47F22000;
    uint size = 0x200;
    dst_data[0..size] = src_data[0..size];
}

For the second one:


struct data_struct
{
    uint block1, block2, block3, block4, block5;
    ulong block6;
    uint[4] bigblock;
}

void main()
{
    auto src_data = cast(data_struct*) 0x40001255; // unaligned, WTF?!
    auto dst_data = *src_data;
}
ζ澈沫 2024-12-09 15:26:53

请注意,您还可以访问 D 中的 C 的 memcpy。D 可以直接访问 C 的整个标准库。

Note that you also have access to C's memcpy in D. D can directly access C's whole standard library.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文