Как установить int для байта * C # - PullRequest
4 голосов
/ 11 июля 2010

Как я могу преобразовать int в байт * по определенному индексу в байте *?

В идеале я хотел бы иметь что-то вроде:

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

Это установило бы первую часть бита на igm [4], а остальные на igm [5].

Редактировать: я понимаю, что может быть много возможных способов справиться с этим, я ищу наиболее эффективный способ, если это возможно.

Ответы [ 3 ]

4 голосов
/ 11 июля 2010

попробуйте это:

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

Как только вы поймете, что можете использовать простую арифметику указателей для индексации в любом месте вашего байтового массива, все становится намного проще.

1 голос
/ 11 июля 2010

Система типов в C # не позволит вам сделать это, как вы могли заметить.Тем не менее, вы можете привести свои указатели к подходящим типам:

    unsafe
    {
        byte* igm = stackalloc byte[8];
        int* intPtr = (int*)igm;
        intPtr[1] = 4283;
    }
0 голосов
/ 11 июля 2010

Вам нужно разбить ваш int на sizeof(int) число байтов, а затем вручную установить эти части на ваш байт * по указанным индексам.

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

...