byte BCD interpretation (Hex->dec)



  • Hallo,

    ich habe ein byte bei dem ich der Hex darstellung als Wert brauche, habe es so gelöst:

    byte source=...;
    
    byte dest= byte.Parse((source).ToString("X"));
    

    gibts es noch ne elegantere lösung??

    grüße



  • Ohne es böse zu meine, aber das ist ja schon fast nen Stück Code für theDailyWTF...

    Was ist denn dein eigentliches Problem? Momentan hast du nen byte source, konvertierst den in nen String und den String konvertierst du wieder in nen Byte. Wobei der Code so nicht funktioniert, weil ToString("X") ja die Zahl zur Basis 16 zurückgibt, Parse aber den Wert zur Basis 10 erwartet und sprich gar nicht mit den Buchstaben a-f rechnet die dir ToString zurückgeben kann.

    Die numerischen Datentypen wie byte,int usw. werden alle binär gespeichert, da gibt es keine verschiedenen Darstellungsformen. Es gibt keine byte Hexdarstellung. Nur bei Eingabe und Ausgabe kann man Zahlen auch in anderen Darstellungsformen angeben. Wenn du nur ToString("X") benutzen würdest um das Byte als Hexadezimalen String zu bekommen, aber den wieder zu parsen und nem byte zuweisen macht keinen Sinn, da source und dest den gleichen Wert haben würden danach. Deshalb die eingehende Frage, was du eigentlich genau machen willst.



  • Geht sowas auch einfacher??

    unsafe short Millisec(byte a, byte b)
    		{
    short res=0;
    
    			fixed (short* pRes = &res)
    			{
    				((byte*)&(*pRes))[0] = a;
    				((byte*)&(*pRes))[1] = b;
    			}
    			return res;
    		}
    


  • @Zwergli: Parse erwartet einfach nur nen String, welcher numerische Zeichen enthält... Und String("X") gibt den Hex wert zurück als string! Es ist mir schon klar das alles Binär gespeichertw ird, und daten Decimal oder Hexadeciaml interpretiert werden können.. aber ich will nun man den Hex wert als Real Wert in eienr variable!!



  • Lowlevler schrieb:

    Geht sowas auch einfacher??

    unsafe short Millisec(byte a, byte b)
    		{
    short res=0;
    
    			fixed (short* pRes = &res)
    			{
    				((byte*)&(*pRes))[0] = a;
    				((byte*)&(*pRes))[1] = b;
    			}
    			return res;
    		}
    
    public static short combine(byte a, byte b)
    { return (short) a << 8 || (short)b; } // oder b mit a vertauschen
    

    Oder was möchstest du?



  • Zu dem ersten: unsafe und fixed sind vollkommen unnötig. Die Standardbitoperatoren sind für die ganzahligen numerischen Datentypen überladen und du musst da nicht mit Pointern rummachen.

    Zum zweiten: Vielleicht stell ich mich dämlich an, aber ich versteh immer noch nicht was dann als Wert da rauskommen soll.
    Angenommen du hast sowas

    byte source = 255;
    

    Dann ist Source die 255 wenn man das dezimal interpretiert, 377 wenn man das oktal interpretiert, ff wenn man das hexadecimal interpretiert und 11111111 wenns mans es binär interpretiert. Aber es ist immer der gleiche Wert.

    Wenn du den jetzt in nen String umwandelst und dann mit Parse zurück in die Zahl, hast du doch wieder genau das gleiche wie vorher, dann kannst auch gleich dest = source schreiben.



  • Ich glaub' folgendes wird gewollt:

    byte source = 0x42; // Dezimal 66, Hexadezimal 42
    
    byte dest = gesuchteFunction(source);
    
    Debug.Assert(dest == 0x66);
    
    /* oder */
    
    Debug.Assert(dest == 42);
    

    Warum auch immer 😉


Anmelden zum Antworten