Abkürzung für Short gesucht!



  • Hallo Leute,

    ich suche seit zwei Tagen fast schon verzweifelt die Abkürzung für short.

    Konstanten wie 0x1234 werden ja als integer intepretiert. Durch ein U (0x1234U) wird es zum unsigned int. Mit einem L zu (0x1234) einem long. usw. Aber was gibt es für short!?

    Konkret muss ich eine Abfrage machen ob ich in einem stream eine "magic byte" finde. Mit einem cast zum short klappt das zwar, aber ich bekomme eine Warnung die mich weiter triezt.

    So für diejenigen die Code haben möchten:

    char *buf=BlackMagic();
    if(*(short*)buf==(short)0x1234) {
       cout<<"Boom"<<endl;
    }
    


  • Warum nicht einfach

    const short magicNumber = 0x1234;
    


  • Ich bekomme die Warning C4309: 'Initialisierung': Verkürzung eines konstanten Wertes



  • Das ehrt Dich, daß Du alle Warnungen an hast.
    Vielleicht die eine mal hier ausmachen.
    Ja, gefällt mich auch nicht, irgendwie muß das auch ohne so Gefrickel gehen.

    //frei aus dem Gedächtnis
    #ifdef __MSVC__
    #pragma warning push
    #pragma warning(disable,4309)// 'Initialisierung': Verkürzung eines konstanten Wertes
    #endif
    const short magicNumber = 0x1234;
    #ofdef __MSVC__
    #pragma warning pop
    #endif
    


  • Das darf eigentlich nur passieren, wenn der Wert nicht in short passt. Ist die magische Zahl wirklich 0x1234 oder vielleicht doch >= 0x8000?

    Falls dem so ist, benutz unsigned short. Besser noch, benutz einen Datentyp fester Länge - ich würde std::tr1::uint16_t vorschlagen, aber bis mindestens msvc 2008 hat msvc das nicht. Denkbar:

    #ifdef MSC_VER
    typedef unsigned __int16 magic_number_t;
    #else
    typedef std::tr1::int16_t magic_number_t;
    #endif
    


  • Ah Stimmt ich habe das MSB gesetzt daran habe ich gar nicht gedacht...



  • Someone123 schrieb:

    Ah Stimmt ich habe das MSB gesetzt daran habe ich gar nicht gedacht...

    LOL, der war gut! 👍
    Gratulation an seldons Kristallkugel. 🙂



  • Schande über mein Haupt!

    char *buf=BlackMagic();
    if(*(short*)buf==0xABCDu) {
       cout<<"Boom"<<endl;
    }
    

    So geht's 😃


Anmelden zum Antworten