Как установить 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) количество байтов, а затем вручную установить эти части для вашего байта * по указанным индексам.

Это будет безопаснее, поскольку вы будете знать, ЧТО и ГДЕ вы размещаете свои данные.

Другие вопросы по тегам