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
- mit boost Endian Unterstützung
- 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; }
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 –
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
Hallo. Ich habe genau kopiert und eingefügt, was du geschrieben hast. Im Folgenden meinen Code in der main.cpp –