2010-12-03 18 views
3

Salut Tous Je suis en train de faire une vérification préliminaire pour voir si mon système est big-endian ou little-endian. Dans LInux, il devrait être little-endian par défaut, mais je voulais juste vérifier. je 2 approchesendianess-check avec boost différer par rapport au résultat par petit code

  1. utilisant le support endian boost
  2. en utilisant un code que je trouve dans le web

J'utilise l'affirmation statique suivante

BOOST_STATIC_ASSERT(!BIG_ENDIAN); 

qui échoue lors de la compilation , donc je pense que ..mmhh ... est mon gros système endian? Ce est l'erreur que j'ai

error: invalid application of ‘sizeof’ to incomplete type 
boost::STATIC_ASSERTION_FAILURE<false>’ 

Si je fais un test en utilisant un code comme celui ci-dessous, il confirme que le système est peu endian. Savez-vous ce que je fais mal et j'utilise correctement la macro Boost?

 
bool is_big_endian_v3(){ 

    long x = 0x34333231; 
    char *y = (char *) &x; 

    if(std::strncmp(y,"1234",4)){ 
     printf("Big Endian"); 
     return true; 
    }else{ 
     printf("Little Endian"); 
     return false; 
    } 
    std::runtime_error ex("I cannot be here"); 
    throw ex; 

} 

Répondre

4

BIG_ENDIAN n'est pas défini par Boost. Si vous regardez le fichier

#include <boost/detail/endian.hpp> 

vous verrez que les macros définies il y a BOOST_BIG_ENDIAN, BOOST_LITTLE_ENDIAN ou BOOST_PDP_ENDIAN. Cela signifie que vous devez réviser votre chèque à l'être:

BOOST_STATIC_ASSERT(!defined(BOOST_BIG_ENDIAN)); 

ou, mieux:

BOOST_STATIC_ASSERT(defined(BOOST_LITTLE_ENDIAN)); 

Edit:

Ce qui précède n'est pas macro étendu comme je m'y attendais, je vous suggère de pour utiliser

#if !defined(BOOST_BIG_ENDIAN) 
BOOST_STATIC_ASSERT(false); 
#endif 

à la place. Désolé pour la confusion.

+0

désolé de vous déranger à nouveau, mais quand j'écris le code le compilateur me dit l'erreur suivante: 'BOOST_BIG_ENDIAN' n'a pas été déclaré dans cette portée.un appel de fonction ne peut pas apparaître dans une expression-constante template argument 1 est invalide. Je ne trouve pas non plus de mot-clé défini –

+0

Avez-vous écrit '! Defined (BOOST_BIG_ENDIAN)' et pas seulement '! BOOST_BIG_ENDIAN'? Sinon, il est difficile de dire d'ici sans voir un petit exemple, mais autonome. – hkaiser

+0

Salut. J'ai copié et collé exactement ce que vous avez écrit. Ci-dessous mon code dans le main.cpp #include –