MykeX Posted April 20, 2012 at 12:20 AM Report #450087 Posted April 20, 2012 at 12:20 AM Boa noite. Estou a utilizar o Lazarus para projectar uma aplicação que vai ser usada para receber dados (através de UDP) que são enviados por uma outra aplicação desenvolvida em C. Neste momento a app já é capaz de receber dados, no entanto o meu problema é fazer os type casts dos mesmos. Os dados enviados consistem num header de 8 bytes + uma estrutura de dados que varia dependendo do tipo de mensagem enviada. O header consiste em: 2 unsigned short int ( 2 * 2 bytes ) + 1 unsigned int ( 4 bytes ). Para receber uma mensagem utilizo: aSocket.GetMessage(data), sendo 'data' uma string. O que eu pretendia era: Dividir esta string nos campos acima mencionados e de seguida converter para inteiro. Ou seja, ficaria com os 3 inteiros que estão no header, e não utilizaria os restantes bytes. Fiz alguma pesquisa na internet mas não encontrei nenhuma solução que funcione Se alguem me pudesse ajudar ficava agradecido. ( É a primeira vez que utilizo o Lazarus ).
bsccara Posted April 20, 2012 at 11:39 AM Report #450143 Posted April 20, 2012 at 11:39 AM Com base na tua descrição crias a seguinte estrutura para o header : header : packed record header1 : word; header2 : word; header3: dword; end; Depois cria um tipo de ponteiro para o record: pheader = ^header; Para acederes aos campos fazes 'pheader(string)' assim : pheader(data)^.header3 Podes mudar os nomes dos campos mas não tires a palavra 'packed' da definição da estrutura senão o compilador vai incluir 'padding' entre os campos para alinhamento.
MykeX Posted April 20, 2012 at 02:10 PM Author Report #450184 Posted April 20, 2012 at 02:10 PM Já consegui. Está a funcionar perfeitamente. Obrigado pela ajuda 🙂
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now