SORU
31 Aralık 2013, Salı


C iş görüşmesi - döküm ve karşılaştırılması

(IMO) zor bir soru ile karşılaştım. MAC addresses, en verimli iki şekilde karşılaştırmak için ihtiyacım vardı.

O anda aklımdan geçen tek düşünce önemsiz çözümü for döngü ve karşılaştırma yerleri oldu, ve ben de öyle yaptım, ama görüşmeci döküm hedefliyordu.

MAC tanımı:

typedef struct macA {
   char data[6];
} MAC;

Ve işlevi (uygulamak istendi):

int isEqual(MAC* addr1, MAC* addr2)
{
    int i;

    for(i = 0; i<6; i  )
    {
        if(addr1->data[i] != addr2->data[i]) 
            return 0;
    }
    return 1;
}

Ama belirtildiği gibi, döküm için hedef almıştı.

Anlam, bir şekilde MAC adresinin bir int verilen dökme adresleri de karşılaştırmak, ve dönüş.

Ama çevrim, int int_addr1 = (int)addr1;, yalnızca dört bayt döküm olacak, değil mi? Geriye kalanlar da kontrol edeyim mi? Anlam yerler 4 ve 5?

Her iki char int döküm ne yasal, ama yani tamsayı türleridir açıklanan durum?

CEVAP
31 Aralık 2013, Salı


Eğer o gerçekten memnun olan bu yaklaşım (ki aslında bir beyin osuruk beri değil mi karşılaştırarak megabayt veya gigabayt veri, bir shan mi gerçekten merak ederek "verimlilik" ve "hız" bu durumda), söyle ona o sana güven kalite ve hız standart kütüphane:

int isEqual(MAC* addr1, MAC* addr2)
{
    return memcmp(&addr1->data, &addr2->data, sizeof(addr1->data)) == 0;
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Glove and Boots

    Glove and Bo

    1 ŞUBAT 2007
  • NLthomas21

    NLthomas21

    20 Mayıs 2008
  • o0oCyrusViruso0o

    o0oCyrusViru

    11 Mart 2008