2010-12-03 1 views
3

Hallo Alle Ich mache einige vorläufige überprüfung, ob mein system big-endian oder little-endian ist. In LInux sollte es standardmäßig Little-Endian sein, aber ich wollte es nur überprüfen. Ich 2 verwendet Ansätzeendianess-check mit boost unterscheiden sich im vergleich zu ergebnis durch kleinen code

  1. mit boost Endian Unterstützung
  2. einige Code ich im Web

ich die folgende statische Behauptung verwendet gefunden

BOOST_STATIC_ASSERT(!BIG_ENDIAN); 

, die während der Kompilierung schlägt fehl , also though..mmhh ... ist mein System Big Endian? Dies ist der Fehler Ich habe

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

Wenn ich einen Test mit etwas Code wie unten tun, bestätigen Sie es, dass das System Little-Endian ist. Weißt du, was ich falsch mache und ich verwende Boost Makro richtig?

 
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; 

} 

Antwort

4

BIG_ENDIAN wird nicht von Boost definiert. Wenn man sich die Datei suchen

#include <boost/detail/endian.hpp> 

werden Sie sehen, dass die Makros definiert sind BOOST_BIG_ENDIAN, BOOST_LITTLE_ENDIAN oder BOOST_PDP_ENDIAN. Das heißt, Sie müssen Ihren Scheck zu überarbeiten sein:

BOOST_STATIC_ASSERT(!defined(BOOST_BIG_ENDIAN)); 

oder besser:

BOOST_STATIC_ASSERT(defined(BOOST_LITTLE_ENDIAN)); 

Edit:

Die oben ist nicht Makro erweitert, wie ich erwartet hatte, so würde ich vorschlagen, zu verwenden

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

statt. Entschuldigung für die Verwirrung.

+0

Sorry, Sie wieder zu stören, aber wenn ich den Code schreibe, sagt mir der Compiler den folgenden Fehler: 'BOOST_BIG_ENDIAN' wurde in diesem Bereich nicht deklariert.ein Funktionsaufruf kann nicht in einem Konstantenausdruck erscheinen Vorlage Argument 1 ist ungültig. Ich kann auch kein definiertes Schlüsselwort finden –

+0

Hast du '! Defined (BOOST_BIG_ENDIAN)' geschrieben und nicht nur '! BOOST_BIG_ENDIAN'? Ansonsten ist es schwierig, von hier aus zu sehen, ohne ein kleines, aber in sich geschlossenes Beispiel zu sehen. – hkaiser

+0

Hallo. Ich habe genau kopiert und eingefügt, was du geschrieben hast. Im Folgenden meinen Code in der main.cpp –

Verwandte Themen