Hex Zahl "zerpflücken"



  • Hallo,

    ich habe eine Hex-Zahl "ABCDE" diese möchte ich nun zerpflücken nämlich so:

    Zahl 1 --> A
    Zahl 2 --> BCD
    Zahl 3 --> E



  • Das find ich aber schön das du das willst 🤡



  • lol 😃



  • irgendwie haben so ne assligen kommentare immer auch was lustiges wenn man nicht der betroffene ist 😃

    ok aber um mal zum thema zurückzukommen...
    was meinst du mit ich habe eine hexzahl... wie liegt die dir den vor in nem string oder hast du die in eine intvariable gepackt... und was genau willst du damit machen?



  • Ich habe mir jetzt mit meinen beschränkten Kentnissen selbst was zusammengestellt. Also los gebts mir, ist das Bockmist ?

    int hex = Convert::ToInt32(textBox1->Text);
    int bit = 1;
    int a, b = 0;
    
    for (int i=0;i < 20; i++)
    {
      if (i == 4)
      {
        bit = 1;
      }
    
      if (hex & 0x01)
      {
        if (i<4)
        {
          b += bit;
        }
        else if (i<16)
        {
          a += bit;
        }
      }
    
      bit = bit << 1; // b *= 2 hätte es auch getan
      hex = hex >> 1;
    }
    


  • Ich habe mir jetzt mit meinen beschränkten Kentnissen selbst was zusammengestellt. Also los gebts mir, ist das Bockmist ?

    lass dich mal nicht unterkriegen, hat ja jeder mal klein angefangen... das sollte einige leute nicht vergessen...allerdings find ich dumme kommentare ab und zu auch recht amüsant...ein forum bei dem ein bisschen blödeln verboten ist stribt sicherlich schnell aus...

    int hex = Convert::ToInt32(textBox1->Text);
    

    öhm ist das irgend ein borland krempel? naja egal ich geh mal davon aus das du in hex jetzt eine "vernüftige" integerzahl drin stehen hast...

    wenn du einfach nur die letzten vier bits die nächsten 12 bits und die drauffolgenden 4 bits haben willst kannst du das relativ einfach so machen

    ungetestet

    int a,bcd,e;
    a=hex&0xf0000;
    bcd=hex&0xfff0;
    e=hex&0xf;
    


  • Hey JohnDoe,
    Windalf hat recht, nicht unterkriegen lassen jeder hat mal klein angefangen, war halt en witziger Kommentar von Niemand... da du keine Frage gestellt hast.

    Also zu deinem Problem, ich würde das ganze anderst angehen, da du die HexZahl ja als string vorliegen hast (bin zwar kein Experte was Windowsprogrammierung angeht, aber eine TextBox wird die Eingabe als string speichern, oder???)
    würde ich mittels dem Index durchgehen und dann auf entsprechende Variablen aufteilen.
    Gruß Wolle



  • int hex = Convert::ToInt32(textBox1->Text);
    

    Hmm, das ist eigentlich VC++.net code.

    @Wolle
    Die StrToInt Umwandlung mache ich nur weil ich mir 'ne TextBox zum testen aufs Formular gemacht habe, ansonsten liegt die Zahl als Zahl und nicht als String vor.

    @Windalf
    Da habe ich doch vor lauter Bits hin und herschieben das naheliegendste übersehen. Ich muss gleich mal deinen Code testen.



  • So,
    Windalfs Lösung hatte einen Haken. Wenn man

    bcd = hex & 0x0fff0
    

    ausführt, dann erhält man als Zahl "bcd0" und das ist ≠ "bcd". Man muss es also hintenrum machen. ( 😮 ich werd hoffentlich nicht gleich als pervers gebrandmarkt. 😃 )

    e = hex&0xf; 
    hex = hex >> 4;
    bcd = hex&0xfff; 
    hex = hex >> 12;
    a = hex & 0xf;
    


  • ja stimmt jetzt wo du es sagst...shiften muss man auch noch... ich hab ja ungetestet dazugeschrieben...allerdings musst du dir beim shiften nicht hex selber zerschiessen du kannst auch a,bcd und e shiften



  • Für solche Sachen sind hin und wieder auch Bitfelder recht hilfreich.

    union my_hex
    {
        int as_int;
        struct parts
        {
            int e : 4;
            int bcd : 12;
            int a : 4;
        };
    };
    
    my_hex hex;
    hex.as_int = Convert::ToInt32(textBox1->Text);
    

    Und mit

    hex.parts.a
    hex.parts.bcd
    hex.parts.e
    

    kannst du auf die diversen Teile zugreifen.


Anmelden zum Antworten