bit da char
galera, alguem sabe como que compara bit a bit de uma char?? eu sei que tem um comando em delphi que já faz isso..
obrigado
Eduardo
obrigado
Eduardo
Edusjc
Curtidas 0
Respostas
Beppe
03/06/2005
Uma maneira é assim:
for I := 0 to 7 do
if Ord(Ch1) and (1 shl I) <> Ord(Ch2) and (1 shl I) then
{ os bits diferem }GOSTEI 0
Edusjc
03/06/2005
só uma duvida, esse algoritmo vai comparar os bits entre 2 char, mas como que eu faço para comparar apenas uma char, por exemplo, to lendo a porta serial e tá chegando uma char, só que preciso saber o que tem nos bits da char, pois primeiro preciso saber se os dois bits mais significativos tenho 1 neles para saber que o resto da mensagem me interessa, e depois, com o restante dos bits, preciso saber qual dos bits está como 0, para saber qual das chaves foram acionadas? tem como fazer isso através desse for???
obrigado
obrigado
GOSTEI 0
Beppe
03/06/2005
Para testar o valor de um bit, use ´Valor and (1 shl Posicao_Bit)´. Se retornar <> 0, então o bit é 1.
Para testar os mais significativos, vc testa o 6 e o 7.
Para testar os mais significativos, vc testa o 6 e o 7.
GOSTEI 0
Edusjc
03/06/2005
Nesse caso, o campo que vc colocou Valor seria o Ord(variavel_char)?
por exemplo, se eu coloco em uma variavel do tipo char, o equivalente ao 254 em decimal que quer dizer 11111110, eu deveria mostrar uma mensagem de que a chave 1 foi acionada então fiz o seguinte código
só que com esse código ele não apresenta nenhuma mensagem. Tem algum erro no que digitei??
obrigado
Eduardo
por exemplo, se eu coloco em uma variavel do tipo char, o equivalente ao 254 em decimal que quer dizer 11111110, eu deveria mostrar uma mensagem de que a chave 1 foi acionada então fiz o seguinte código
if Ord(ch) and (1 shl 7)<>0 then if Ord(ch) and (1 shl 6)<>0 then begin if ord(ch) and (1 shl 0)=0 then memo1.Lines.Add(´chave1´) else if ord(ch) and (1 shl 1)=0 then memo1.Lines.Add(´chave2´) else if ord(ch) and (1 shl 2)=0 then memo1.Lines.Add(´chave3´) else if ord(ch) and (1 shl 3)=0 then memo1.Lines.Add(´chave4´) else if ord(ch) and (1 shl 4)=0 then memo1.Lines.Add(´chave5´) else if ord(ch) and (1 shl 5)=0 then memo1.Lines.Add(´chave6´)
só que com esse código ele não apresenta nenhuma mensagem. Tem algum erro no que digitei??
obrigado
Eduardo
GOSTEI 0
Beppe
03/06/2005
Funcionou perfeitamente aqui. Tem certeza de que o valor é 254?
GOSTEI 0
Edusjc
03/06/2005
sim.. como foi que vc testou aí??
GOSTEI 0
Beppe
03/06/2005
Apenas envolvi seu código com o que faltava. + um TMemo e TButton.
var
Ch: Char;
begin
Ch := #254;
{ aquele seu código aqui }
end;
end;GOSTEI 0