如何将 int 设置为 byte* C#

发布于 2024-09-09 03:32:55 字数 249 浏览 13 评论 0原文

如何在 byte* 中的某个索引处将 int 转换为 byte*?

理想情况下,我希望有类似的内容:

unsafe{
    byte* igm=stackalloc byte[8];
    igm[4]=4283;
}

它将位的第一部分设置为 igm[4],其余部分设置为 igm[5]。

编辑:我意识到可能有很多可能的方法来处理这个问题,我正在寻找最有效的方法(如果可能的话)。

How can I convert an int to a byte* at a certain index in a byte*?

Ideally I would like to have something like:

unsafe{
    byte* igm=stackalloc byte[8];
    igm[4]=4283;
}

It would set the first part of the bit to igm[4] and the rest into igm[5].

Edit: I realize there may be a lot of possible ways to handle this, i am looking for the most efficient way if possible.

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

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

发布评论

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

评论(3

神仙妹妹 2024-09-16 03:32:55

尝试一下:

unsafe
{
    byte* igm = stackalloc byte[8];
    *(int*)(igm + 4) = 4283;
}

一旦您意识到可以使用简单的指针算术来索引字节数组中的任何位置,事情就会变得容易得多。

try this:

unsafe
{
    byte* igm = stackalloc byte[8];
    *(int*)(igm + 4) = 4283;
}

Once you realize that you can use simple pointer arithmetic to index anywhere in your byte array, things get a LOT easier.

木森分化 2024-09-16 03:32:55

您可能已经注意到,C# 中的类型系统将阻止您这样做。但是,您可以将指针转换为适当的类型:

    unsafe
    {
        byte* igm = stackalloc byte[8];
        int* intPtr = (int*)igm;
        intPtr[1] = 4283;
    }

The type system in C# will prevent you from doing that, as you might have noticed. However, you can cast your pointers to be the appropiate types:

    unsafe
    {
        byte* igm = stackalloc byte[8];
        int* intPtr = (int*)igm;
        intPtr[1] = 4283;
    }
不打扰别人 2024-09-16 03:32:55

您需要将 int 分解为 sizeof(int) 字节数,然后在指定索引处手动将这部分设置为您的 byte* 。

这会更安全,因为您会知道数据的内容和位置。

You need to break your int to sizeof(int) count of bytes and then manually set this parts to your byte* at specified indexes.

This will be safer as you'll know WHAT and WHERE you place your data.

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