【问题标题】:How to set an int to byte* C#如何将 int 设置为 byte* C#
【发布时间】:2010-07-11 09:21:29
【问题描述】:
如何在字节*中的某个索引处将 int 转换为字节*?
理想情况下,我想拥有类似的东西:
unsafe{
byte* igm=stackalloc byte[8];
igm[4]=4283;
}
它将位的第一部分设置为 igm[4],其余部分设置为 igm[5]。
编辑:我意识到可能有很多可能的方法来处理这个问题,如果可能的话,我正在寻找最有效的方法。
【问题讨论】:
标签:
c#
int
byte
unsafe
stackalloc
【解决方案1】:
试试这个:
unsafe
{
byte* igm = stackalloc byte[8];
*(int*)(igm + 4) = 4283;
}
一旦您意识到可以使用简单的指针算法来索引字节数组中的任何位置,事情就会变得容易得多。
【解决方案2】:
您可能已经注意到,C# 中的类型系统会阻止您这样做。但是,您可以将指针转换为适当的类型:
unsafe
{
byte* igm = stackalloc byte[8];
int* intPtr = (int*)igm;
intPtr[1] = 4283;
}
【解决方案3】:
您需要将 int 分解为 sizeof(int) 字节数,然后在指定索引处手动将此部分设置为您的字节*。
这会更安全,因为您将知道您将数据放在什么位置和位置。