Как установить int для байта * C#
Как я могу преобразовать int в байт * по определенному индексу в байте *?
В идеале я хотел бы иметь что-то вроде:
unsafe{
byte* igm=stackalloc byte[8];
igm[4]=4283;
}
Он установит первую часть бита на igm[4], а остальную часть на igm[5].
Изменить: я понимаю, что может быть много возможных способов справиться с этим, я ищу наиболее эффективный способ, если это возможно.
3 ответа
Попробуй это:
unsafe
{
byte* igm = stackalloc byte[8];
*(int*)(igm + 4) = 4283;
}
Как только вы поймете, что можете использовать простую арифметику указателей для индексации в любом месте вашего байтового массива, многое станет намного проще.
Система типов в C# не позволит вам сделать это, как вы могли заметить. Тем не менее, вы можете привести свои указатели к подходящим типам:
unsafe
{
byte* igm = stackalloc byte[8];
int* intPtr = (int*)igm;
intPtr[1] = 4283;
}
Вы должны сломать свой инт, чтобы sizeof(int)
количество байтов, а затем вручную установить эти части для вашего байта * по указанным индексам.
Это будет безопаснее, поскольку вы будете знать, ЧТО и ГДЕ вы размещаете свои данные.