Avatar billede ggxdg Nybegynder
30. august 2012 - 14:36 Der er 7 kommentarer og
1 løsning

XOR af bytes

Halløj Eksperter!

Jeg sidder og forsøger at kode et lille program til noget seriel-kommunikation med et apparat.
Den vil gerne have en block check character, som er alle bytes der sendes til den inklusive STX og ETX.

Grundet opbygningen af min kode, kan jeg dog nøjes med altid at sammenligne 2 bytes, men "^" operatoren fungerer kun med int.

Så det store spørgsmål er:
Er der nogen hurtig/nem måde at XOR'e 2 bytes, eller skal man ud i at konvertere begge bytes til int, XOR'e, og konvertere tilbage til bytes?
Avatar billede ggxdg Nybegynder
30. august 2012 - 14:38 #1
Rettelse:
som er alle bytes der sendes til apparatet inklusive STX og ETX som XOR'es.
Avatar billede arne_v Ekspert
30. august 2012 - 15:14 #2
byte b1;
byte b2;
byte b3 = (byte)(b1 ^ b2);

er ikke slemt
Avatar billede arne_v Ekspert
30. august 2012 - 15:16 #3
Men hvis du har en 2 int med 4 bytes i hver vil xor af dem ogsaa give de 4 rigtige xor vaerdier.

Jeg tror bare at koden til at putte de bytes ind i int's vil give alt for meget overhead.
Avatar billede ggxdg Nybegynder
30. august 2012 - 15:59 #4
Yeah - Det var også ca. den løsning jeg selv kom frem til.
Det var ret så meget nemmere end jeg havde forventet, fordi at jeg med "(int)" kunne behandle mine bytes som integers. Jeg havde frygtet for at skulle jonglere en masse variabler i forskellige former.

Tak for hjælpen - og smid et svar :)
Avatar billede arne_v Ekspert
30. august 2012 - 16:02 #5
Lidt af pointen er at du ikke behoever eksplicit at konvertere fra byte til int - det sker automatisk med xor.
Avatar billede arne_v Ekspert
30. august 2012 - 16:02 #6
og svar
Avatar billede ggxdg Nybegynder
30. august 2012 - 16:07 #7
Jeg havde ellers i starten bare lavet groft sagt:
bytea ^= byteb
hvor den så brokkede sig over at det ikke var integers.
Efter jeg lavede det explicit, så kørte det bare lige som det skulle.
Set i retrospekt er det muligt at det er fordi at jeg kørte en konvertering på en string som blev lavet til hex, hvor "byteb" står i ovenstående eksempel.
Avatar billede ggxdg Nybegynder
30. august 2012 - 16:11 #8
Yeah - når jeg bruger variablen som sættes til den konverterede værdi, så fungerer det uden explicit.

byteArr[i] = konverteringfraSTRtilHEX;
ixor ^= konverteringfraSTRtilHEX; //fejl
ixor ^= (int)konverteringfraSTRtilHEX; //ingen fejl
ixor ^= byteArr[i] //ingen fejl
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester