SORU
19 EYLÜL 2008, Cuma


Nasıl C big-endian ve little-endian değerleri arasında dönüştürebilirim ?

Nasıl C big-endian ve little-endian değerleri arasında dönüştürebilirim ?

Netliği, başka bir İŞLEMCİ mimarisi ikili veri (çift duyarlıklı kayan nokta değerleri ve 32-bit ve 64-bit tamsayı) çevirmek için var. DÜZENLEMEK İçin: Bu ağ ile ilgili değil, bu yüzden ntoh() ve benzeri fonksiyonları burada işe yaramaz.

EDİT #2: doğrudan hedefleme ben Derleyiciler için geçerlidir seçtim neden olan) kabul ettim cevabı. Ancak, çok iyi, daha taşınabilir diğer cevaplar burada var.

CEVAP
19 EYLÜL 2008, Cuma


KullanıyorsanızVisual Caşağıdakileri yapın: intrin içerir.h ve aşağıdaki işlevleri çağrı:

16 bit sayı:

unsigned short _byteswap_ushort(unsigned short value);

32 bit numaraları:

unsigned long _byteswap_ulong(unsigned long value);

64 bit numaraları:

unsigned __int64 _byteswap_uint64(unsigned __int64 value);

8 bit sayı (karakter) dönüştürülmesi gerek yok.

Ayrıca bu sadece imzalı tamsayı için de çalışıyorlar işaretsiz değerler için tanımlanır.

Hazırlıklarını ve bu gibi düz tamsayılar olarak daha zor veya makineleri-sipariş bayt host olmayabilir iki katına çıkar. Küçük-büyük indian-indian makineler üzerinde yüzen ve tam tersi alabilirsiniz.

Diğer Derleyiciler de benzer ön tanımlı.

GCCörneğin doğrudan arayabilirsiniz:

int32_t __builtin_bswap32 (int32_t x)
int64_t __builtin_bswap64 (int64_t x)

(bir şey daha eklemek gerek). Afaık bit.h gcc merkezli olmayan bir şekilde ben de aynı işlevi beyan eder.

16 bit takas sadece biraz Döndür.

Bu ön tanımlı aramak yerine kendi haddeleme en iyi performansı sağlar ve yoğunluğu btw.. kod

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GoldgenieOfficial

    GoldgenieOff

    23 Temmuz 2009
  • Malwarebytes

    Malwarebytes

    22 Temmuz 2007
  • TWiT Netcast Network

    TWiT Netcast

    27 EKİM 2005