Oprettet tor. d. 30. august 2012 kl. 14:36:00

ggxdg
ggxdg (7.735 point. Point ude: 230)

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?

Skrevet tor. d. 30. august 2012 kl. 14:38:16| #1

ggxdg
ggxdg (7.735 point)
Rettelse:
som er alle bytes der sendes til apparatet inklusive STX og ETX som XOR'es.

Skrevet tor. d. 30. august 2012 kl. 15:14:35| #2

arne_v
arne_v (1.048.783 point)
byte b1;
byte b2;
byte b3 = (byte)(b1 ^ b2);

er ikke slemt

Skrevet tor. d. 30. august 2012 kl. 15:16:14| #3

arne_v
arne_v (1.048.783 point)
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.

Skrevet tor. d. 30. august 2012 kl. 15:59:00| #4

ggxdg
ggxdg (7.735 point)
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 :)

Skrevet tor. d. 30. august 2012 kl. 16:02:01| #5

arne_v
arne_v (1.048.783 point)
Lidt af pointen er at du ikke behoever eksplicit at konvertere fra byte til int - det sker automatisk med xor.

Skrevet tor. d. 30. august 2012 kl. 16:02:15| #6


Skrevet tor. d. 30. august 2012 kl. 16:07:29| #7

ggxdg
ggxdg (7.735 point)
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.

Skrevet tor. d. 30. august 2012 kl. 16:11:53| #8

ggxdg
ggxdg (7.735 point)
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

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   


Seneste spørgsmål

Mine float værdier mister '.' når jeg læser tal i dem

Oprettet den 23. maj 2013 kl. 22.56
CodingJoe giver 30 point for svar | Giv et svar »

Redigere appconfig settings fra web.config i runtime

Oprettet den 22. maj 2013 kl. 14.41
lasserasch giver 60 point for svar | Giv et svar »

Extension methods med constraint på interface

Oprettet den 18. maj 2013 kl. 19.26
CodingJoe giver 30 point for svar | Giv et svar »








Tips & Tricks fra PC World

Teaser billede

Fem smarte funktioner i din Mac som du sikkert ikke kender

Her har du fem muligheder for at tweake din Mac på en fed måde.


Anmeldelser fra PC World

Teaser billede

Test: Samsung Galaxy S4 er et hit - trods gøglertricks

Kan Samsung beholde førertrøjen i det store Android-race? Galaxy S4 er smækfyldt med innovative funktioner, men også med en del gøgl. Er det for meget? Få vores dom over Samsungs nye topmodel.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Ny opfindelse: Oplad din mobil på 20 sekunder

Måske er det snart slut med at lade mobilen op hver aften. Med ny opfindelse kan telefonen få fuld energi på sølle 20 sekunder.


Nyheder fra Computerworld

Teaser billede

Galleri: De 10 vildeste datacentre i verden

I en gammel kirke, i et oppusteligt telt, på nedlagte militæranlæg eller midt i ørkenen. Der er ingen grænser for, hvor man kan banke et datacenter op. Her er de 10 sejeste anlæg i verden. I...


IT Kurser
Samarbejdspartnere

Udgiver · © 2013 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger