Array
(
)

Array de Bytes Cshapr - Dúvida

Fcarvalho
   - 12 abr 2015

Fala galera, tudo bem? Estou construindo uma aplicação de baixo nível em que eu recebo uma mensagem no formato de bytes em determinado tempo. A minha função que recebe esta mensagem de bytes, a armazena na minha variável local do tipo byte que é chamada de buffer[]. A minha dúvida é a seguinte, eu preciso pegar o primeiro byte (byte inicial) e o último byte (byte final) destas mensagens que me são enviadas. Do meu array de bytes que é o buffer[]. E isso porque quando eu identificar que terminei de receber tal mensagem, eu terei que criar um intervalo de tempo.
Alguém sabe como eu poderia pegar o primeiro e o último byte deste array de bytes ? Estarei no aguardo, obrigado!

Thiago Santana
   - 13 abr 2015

Qual a linguagem utilizada Fábio?

Riechelmann
   - 13 abr 2015


Citação:
Qual a linguagem utilizada Fábio?


Thiago ele colocou na descrição C#.

Fábio,

Essa função pode te auxiliar para o intervalo de Tempo

Thread.Sleep

Primeiro byte
buffer[0]?

Último byte
buffer[buffer.Length - 1]

Fcarvalho
   - 13 abr 2015


Citação:
Qual a linguagem utilizada Fábio?


c#

Citação:

Fábio,

Essa função pode te auxiliar para o intervalo de Tempo

Thread.Sleep

Primeiro byte
buffer[0]?

Último byte
buffer[buffer.Length - 1]


Lucas, valeu!Irei tentar, caso dê certo irei postar aqui mais tarde.

Thiago Santana
   - 13 abr 2015

Não me atentei Lucas.
Mas a ideia é essa mesmo primeiro elemento posição 0.
Ultimo elemento posição = tamanho do array - 1

Fcarvalho
   - 16 abr 2015

Então galera, consegui utilizando um exemplo da MS. O Length não dava porque ele pega o tamanho do array, eu precisava de algo pra ler dentro do buff também, então fiz uma verificação utilizando inteiros mesmo, dei um readbuffer pra pegar esse buff em uma das variáveis, e utilizei temporizador. Muito obrigado aos que me ajudaram!

#Código

private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;
            try
            {
                //retrieve number of bytes in the buffer
                int bytes = 1, bytesLast = 0;

                while (bytesLast != bytes)
                {
                    Stopwatch sw = new Stopwatch();

                    bytesLast = bytes;
                    // delay em microsegundos ------------------------------------------------------------

                    sw.Start();
                    while ((sw.ElapsedTicks / (Stopwatch.Frequency / (1000L * 1000L))) < interchar_delay_us) ;
                    sw.Stop();
                    //------------------------------------------------------------------------------------

                    bytes = sp.BytesToRead;
                }

                //create a byte array to hold the awaiting data
                comBuffer = new byte[bytes];
                //read the data and store it
                sp.Read(comBuffer, 0, bytes);
                if (bytes > 4 && bytes < 13)
                {
                    if(clsProtocolo.ChecarCRC(comBuffer))
                        EventDataRecived(comBuffer);

                    Console.WriteLine();
                    foreach (var b in comBuffer)
                    {                        
                        Console.Write(String.Format("{0:X} ", b));

                    };                 
                }
                

            }
            catch
            {
                //    MessageBox.Show("Erro");
                Console.WriteLine("ERROR");
            }
            //    Console.ReadKey();
        }