Você está aqui: Delphi ::: Win32 API (Windows API) ::: Tipos de Dados |
Como formar um WORD a partir de dois BYTEQuantidade de visualizações: 12237 vezes |
|
O tipo de dados BYTE da API do Windows é um tipo integral de 8 bits sem sinal (com valor mínimo de 0 e máximo de 255) enquanto o tipo WORD é um tipo integral de 16 bits também sem sinal (com o valor mínimo de 0 e o máximo de 65.535). Isso nos mostra que um WORD é o dobro de um BYTE. Em algumas ocasiões pode ser necessário guardar em um WORD o valor de dois BYTE, talvez com o propósito de separá-los em um determinado momento (em minhas dicas nesta mesma seção você verá como isso pode ser feito). Dois BYTE podem ser agrupados em um WORD usando a macro MAKEWORD da API do Windows. Comece analisando os seguintes valores: Valor 1: 80 Valor 2: 120 Estes dois valores podem ser representados em binário da seguinte forma: Valor 1: 01010000 Valor 2: 01111000 Ao combinarmos estes dois bytes em um WORD, o primeiro valor será o byte de ordem alta (mais significativo) e o segundo valor será o byte de ordem baixa (menos significativo). E o resultado será dois bytes: Valor final: 01010000 01111000 Transformando este valor binário em decimal nós temos 20600. Vamos ver isso em Delphi? Analise cuidadosamente o trecho de código abaixo:
procedure TForm3.Button2Click(Sender: TObject);
var
resultado: WORD;
ordem_alta, ordem_baixa: BYTE;
begin
// byte mais significativo
ordem_alta := 80;
// byte menos significativo
ordem_baixa := 120;
// vamos juntar os dois valores em um WORD
resultado := MAKEWORD(ordem_baixa, ordem_alta);
// vamos exibir o resultado
Memo1.Lines.Add('O valor WORD resultante é: ' +
IntToStr(resultado));
end;
Ao executar este código teremos o seguinte resultado: O valor WORD resultante é: 20600 Note que a macro MAKEWORD pede primeiro o byte de ordem baixa e então o byte de ordem alta. O Delphi também nos oferece uma função MakeWord() que recebe dois bytes (na mesma ordem que MAKEWORD) e retorna um Word. Veja sua definição na unit Windows.pas: function MakeWord(A, B: Byte): Word; begin Result := A or B shl 8; end; O entendimento desta função é bem simples. Suponhamos que temos os seguintes bytes: a: 01010000 (ordem alta) b: 01111000 (ordem baixa) O operador shl move (shift) o byte de ordem alta 8 bits para a esquerda, resultando em 01010000 00000000. Em seguida aplicamos o operador or (que torna um bit 0 somente quando os dois bits dos valores comparados são 0). Veja: 00000000 01111000 (ordem baixa) 01010000 00000000 (ordem alta - depois de aplicado o operador shl) ----------------- 01010000 01111000 Convertendo 01010000 01111000 para decimal nós temos 20600. Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
|
|
Desafios, Exercícios e Algoritmos Resolvidos de Delphi |
Veja mais Dicas e truques de Delphi |
Dicas e truques de outras linguagens |
|
Java - Como comparar strings em Java usando os métodos compareTo() e compareToIgnoreCase() da classe String VisuAlg - Exercícios Resolvidos de VisuAlg - Como calcular e exibir os 50 primeiros números primos em VisuAlg |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |




