C++ Binärzahl zuweisen?

Dieses Thema im Forum "Mac OS X Entwickler, Programmierer" wurde erstellt von Altivec, 13.11.2006.

  1. Altivec

    Altivec Thread Starter MacUser Mitglied

    Beiträge:
    1.268
    Zustimmungen:
    56
    MacUser seit:
    29.05.2006
    Hallo!
    Ich hab vor, ein Programm zu schreiben, das mit Bits und Bytes umgehen soll. Hab auch gerade entdeckt, daß man einer Variablen Hex-Werte zuweisen kann. Manchmal ist es aber auch ganz angenehm, Binärzahlen zu haben. Gibt es eigentlich die Wertzuweisung und -ausgabe (s.u.) auch in binär?

    Code:
    [SIZE="3"][SIZE="2"][COLOR="Blue"]#include[/COLOR] <iostream>
    
    [COLOR="Blue"]typedef unsigned char  byte[/COLOR];
    [COLOR="blue"]typedef unsigned short word[/COLOR];
    
    [COLOR="Blue"]int[/COLOR] main()
    {
    	[COLOR="blue"]using namespace[/COLOR] std;
    	
    	[COLOR="blue"]byte[/COLOR] a = 0x2F;
    
    	cout.setf(ios::hex, ios::basefield);
    
    	cout << "a = " << ([COLOR="blue"]int[/COLOR]) a << endl;
    
    	[COLOR="blue"]return[/COLOR] 0;
    }[/SIZE][/SIZE]
     
  2. autoexec.bat

    autoexec.bat MacUser Mitglied

    Beiträge:
    2.130
    Zustimmungen:
    20
    MacUser seit:
    21.01.2005
    Nein, da ist Handarbeit angesagt. :hehehe:
     
  3. Altivec

    Altivec Thread Starter MacUser Mitglied

    Beiträge:
    1.268
    Zustimmungen:
    56
    MacUser seit:
    29.05.2006
    Schade, schade... :(

    Hab mir jetzt als Notlösung diese Variante der Zuweisung überlegt:

    Code:
    [COLOR="Blue"]byte[/COLOR] b = bin8(0x00101111);
    mit der Funktion

    Code:
    [COLOR="blue"]byte[/COLOR] bin8([COLOR="blue"]unsigned long[/COLOR] b)
    {
    	[COLOR="blue"]int[/COLOR] feld[]={1,2,4,8,16,32,64,128};
    	[COLOR="blue"]int[/COLOR] dez = 0;
    
    	[COLOR="blue"]for[/COLOR] ([COLOR="blue"]int[/COLOR] i = 7; i >= 0; i--)
    		dez += b & (1 << 4*i) ? feld[i] : 0;
    
    	[COLOR="blue"]return[/COLOR] dez;
    }
    Falls jemand eine bessere Lösung kennt, wird die natürlich gern genommen.
     
  4. autoexec.bat

    autoexec.bat MacUser Mitglied

    Beiträge:
    2.130
    Zustimmungen:
    20
    MacUser seit:
    21.01.2005
    Darfs ein bisschen C sein? :hehehe:

    Code:
    long b = strtol("00101111",NULL, 2);
    
    Return-Werte zu ignorieren ist natürlich nie eine gute Idee. :Oldno:


    Wenn es eine reine C++-Lösung sein soll, lies dich mal in Bitsets ein.

    Ich hab es jetzt nicht mehr ganz im Kopf, aber so in etwa müsste es gehen:

    Code:
    #include <iostream>
    #include <bitset>
    
    using namespace std;
    
    int main() {
    
    	string s("11001111");
    	bitset<8> bs (s);
    
    	cout << "Binaer: " << bs << endl;
    	cout << "Dezimal: " << bs.to_ulong() << endl;
    
    	return 0;
    }
    
     
  5. der_Kay

    der_Kay MacUser Mitglied

    Beiträge:
    1.693
    Zustimmungen:
    7
    MacUser seit:
    02.09.2004
    Es gibt auch in C die gerne vergessenen bitfields, der Mehrwert liegt aber im STL-Typ std::bitset

    PHP:
    #ifndef byte
    #define byte unsigned char
    #endif

    typedef union _BYTE
    {
        
    byte _b;

        
    struct
        
    {
            
    unsigned _0 :1
            
    unsigned _1 :1
            
    unsigned _2 :1
            
    unsigned _3 :1;
            
    unsigned _4 :1
            
    unsigned _5 :1
            
    unsigned _6 :1
            
    unsigned _7 :1;
        };
    BYTE;
     
  6. Altivec

    Altivec Thread Starter MacUser Mitglied

    Beiträge:
    1.268
    Zustimmungen:
    56
    MacUser seit:
    29.05.2006
    Sehr interessant, danke für Eure Tips!
     

Diese Seite empfehlen