Gå til innhold

C#: Sammenlikne verdiene i to byte arrays


Anbefalte innlegg

Skrevet

Nå har det stoppet helt opp i hodet.

 

Jeg har to byte arrays som begge inneholder åtte elementer.

Jeg vil sjekke om disse to inneholder samme verdiene. Jeg kan selvfølgelig lage en metode som intererer gjennom arrayene og sammelinker verdiene en for en, men jeg hadde kanskje håpet at det fantes en eller annen "ByteArrayComparer" klasses eller liknende.

 

Ja, jeg har googlet, men det eneste jeg finner der er at jeg må lage en metode som itererer gjennom arrayene. Er det virkelig den eneste måten?

Videoannonse
Annonse
Skrevet

Tenker det, men det er ikke mye kode da

Regner med at Array.Equals bare sammenligner referansene (hvis array.Equals engang finnes)

 

bool CompareArrays(byte[] a, byte[] b)
{
 for(int i = 0; i < a.Length; i++)
if(a[i] != b[i])
  return false
 return true;
]

Skrevet

Nei, det er ikke mye kode, ville bare høre om det kanskje eksisterte ferdige metoder for det.

Metoden min sjekker i tillegg for null referanse og at arrayene er like store.

Når guruene på forumet ikke vet om noen annen måte så får det bli på den måten :thumbup:

 

.Equals finnes, men sammenlikner bare referansene som du sier.

 

Takk for svar :)

Skrevet

Tror dette skal funke. Hvorvidt det faktisk er noe kjappere aner jeg ikke riktignok :p

 

bool CompareArrays(byte[] a, byte[] b)
{
return ((BitConverter.ToInt64(b, 0) ^ BitConverter.ToInt64(a, 0)) == 0);
}

Skrevet

Hehe, tror ikke bitconverter er noe raskere, men er man avhengig av hastighet, kan man gjøre dette:

public unsafe bool CompareArrays(byte[] a, byte[] b)
{
 bool ret = false;
 fixed(long *p_a = (long*)a, long *p_b = (long*)b)
 {
ret *p_a == *p_b;
 }
 return ret;
}

:)

  • 3 uker senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...