C'de onaltılık bir dizeyi verimli bir şekilde tamsayıya dönüştürmek?

C'de, onaltılık rakamlardan oluşan bir dizeyi ikili işaretsiz int veya işaretsiz longa dönüştürmenin en etkili yolu nedir?

Örneğin, 0xFFFFFFFE değerine sahipsem, base10 değeri 4294967294 olan bir int istiyorum.

Çözüm

Siz strtol veya strtoul istiyorsunuz. Ayrıca bakınız Unix man page

Yorumlar (0)

Bunu dene:

#include 
int main()
{
    char s[] = "fffffffe";
    int x;
    sscanf(s, "%x", &x);
    printf("%u\n", x);
}
Yorumlar (1)

@Eric

İşe yarayan bir kod çözümü neden oylanıyor? Elbette, çirkin ve bunu yapmanın en hızlı yolu olmayabilir, ancak "strtol" veya "sscanf" demekten daha öğreticidir. Kendiniz denerseniz, kaputun altında işlerin nasıl yürüdüğü hakkında bir şeyler öğreneceksiniz.

Çözümünüzün gerçekten oylanmaması gerektiğini düşünüyorum, ancak bunun neden olduğuna dair tahminim, daha az pratik olması. Oylama ile ilgili fikir, "en iyi" cevabın en üste çıkacağıdır ve cevabınız kaputun altında ne olduğu hakkında daha öğretici olsa da (veya bunun olabileceği bir yol), kesinlikle bir üretim sisteminde onaltılık sayıları ayrıştırmanın en iyi yolu değildir.

Tekrar ediyorum, cevabınızda eğitim açısından yanlış bir şey olduğunu düşünmüyorum ve kesinlikle olumsuz oy kullanmazdım (ve kullanmadım). Bazı insanlar cevaplarınızdan birini beğenmedi diye cesaretiniz kırılmasın ve paylaşım yapmayı bırakmayın. Olur böyle şeyler.

Cevabımın sizinkinin oylanması konusunda sizi daha iyi hissettireceğinden şüpheliyim, ancak bir şeyin neden oylandığını sorduğunuzda ve kimse cevap vermediğinde özellikle eğlenceli olmadığını biliyorum.

Yorumlar (2)