Jump to content

Duvida no cast de Struct para char[]


Recommended Posts

Posted

Boas,

Tenho aqui uma duvida na conversao de uma estrutura para um array de bytes. Ja tentei cast explicitos e nao funciona.

Struct x{

  int a,

  int b,

};

char[] xArray = (char[])x;

Eu queria qualquer coisa deste genero, em que o array de char's/byte's neste caso iria ficar com oito posições ocupadas, devido a um inteiro ocupar quatro bytes. E claro depois também precisava de um cast ao contrario, passar um array de char's para uma Struct.

Obrigado

Posted

Em 1º lugar, estás a declarar mal a variável xArray. Deveria ser:

char xArray[](...)

Depois, o tipo de cast que pretendes só pode ser feito entre apontadores. Por exemplo:

struct xType {
int a;
int b;
};

void main() {
xType x;

x.a=10;
x.b=20;

char *xArray = reinterpret_cast<char*>(&x);

xType *x2 = reinterpret_cast<xType*>(xArray);
}

suponho que já faz o que pretendes. Vê este artigo sobre type casting 😁

Desaparecido.

Posted

Obrigado, pelo menos a compilação não gera qualquer tipo de erro, ainda tenho de testar isto melhor.

Grande site o de C++  😛   nao conhecia, mas fica ja nos meus favoritos 😉

xType *x2 = reinterpret_cast<xType*>(xArray)

Agora neste exemplo, se em vez de eu colocar xType*, colocar uma instancia xType, sera que ha algum problema? (Bem o melhor e compilar)

Abraço

Posted

Ali onde está <xType*> estás a dizer o tipo de dados que queres que o compilador interprete. Se utilizares uma instância do tipo já não vai ser um tipo, e irá dar erro ao compilar.

Desaparecido.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.