Como definir um int para byte* C#
-
13-09-2020 - |
Pergunta
Como posso converter um int em um byte* em um determinado índice em um byte*?
Idealmente, eu gostaria de ter algo como:
unsafe{
byte* igm=stackalloc byte[8];
igm[4]=4283;
}
Ele definiria a primeira parte do bit como igm[4] e o restante como igm[5].
Editar:Sei que pode haver muitas maneiras possíveis de lidar com isso. Estou procurando a maneira mais eficiente, se possível.
Solução
tente isto:
unsafe
{
byte* igm = stackalloc byte[8];
*(int*)(igm + 4) = 4283;
}
Depois que você perceber que pode usar aritmética de ponteiro simples para indexar qualquer lugar em sua matriz de bytes, as coisas ficarão MUITO mais fáceis.
Outras dicas
O sistema de tipos em C# impedirá que você faça isso, como você deve ter notado.No entanto, você pode definir seus ponteiros para os tipos apropriados:
unsafe
{
byte* igm = stackalloc byte[8];
int* intPtr = (int*)igm;
intPtr[1] = 4283;
}
Você precisa quebrar seu int para sizeof(int)
contagem de bytes e, em seguida, defina manualmente essas partes para seu byte* em índices especificados.
Isso será mais seguro, pois você saberá O QUE e ONDE coloca seus dados.