
_di0
(usa FreeBSD)
Enviado em 16/08/2012 - 00:43h
char BufferTX[10]={0};
char BufferRX[10]={0};
Finalizando um vetor de caractere com valor null --> 'f'o'o'b'a'r'a'l'b'{TTEXTO}
isso é necessário pois é de responsabilidade do programador passar para read onde termina o buffer lido:
read((char *) BufferRX);
iComando=BufferRX[0] << 8;
No primeiro índice há um deslocamento(shift) de 8 bits, portanto se temos nesse índice:
0000 0010 0000 0000 (512 em decimal)
após o deslocamento:
0000 0000 0000 0010 (ficará 2 em decimal)
iComando+=BufferRX[0] & 0x00FF;
Aqui uma comparação E bit a bit (acredito que saiba a tabela verdade)
Ou seja,
0000 0010 0000 0000 (512)
0000 0000 1111 1111(0x00FF)
O resultado da operação será:
0000000000000000 (tudo zerado)
O seguintes fragmentos fazem a mesma coisa, só que ao contrário
BufferTX[0]= iComando >> 8;
BufferTX[1]= iComando & 0x00FF;
send ((char *) BufferTX
Esse tipo de operação, é muito usado em Network Byte Orders(http://www.bruceblinn.com/linuxinfo/ByteOrder.html), aqueles métodos usados com tarefas designadas a sockets de comunicação, tais funções como:
htons() Host to Network Short
htonl() Host to Network Long
etc...
Há um motivo para tudo isso, o que é muito complexo para eu explicar aqui e também foge do foco da pergunta, pesquise sobre bitwise, operação bit a bit, big endian, caso tenha interesse.