bitset frage



  • hallo,

    wie kann man ein char test[1] oder char test mit einem bitset<8> initialisieren?
    bitset hat ja die funktion to_string(); da komme ich einen std::string.

    bye



  • sowas ist ja auch nicht gerade toll?^^

    char getHexCharacter(std::string str)
    {
    	if(str.compare("1111") == 0) return 'F';
    	else if(str.compare("1110") == 0) return 'E';
    	else if(str.compare("1101")== 0) return 'D';
    	else if(str.compare("1100")== 0) return 'C';
    	else if(str.compare("1011")== 0) return 'B';
    	else if(str.compare("1010")== 0) return 'A';
    	else if(str.compare("1001")== 0) return '9';
    	else if(str.compare("1000")== 0) return '8';
    	else if(str.compare("0111")== 0) return '7';
    	else if(str.compare("0110")== 0) return '6';
    	else if(str.compare("0101")== 0) return '5';
    	else if(str.compare("0100")== 0) return '4';
    	else if(str.compare("0011")== 0) return '3';
    	else if(str.compare("0010")== 0) return '2';
    	else if(str.compare("0001")== 0) return '1';
    	else if(str.compare("0000")== 0) return '0';
    	else if(str.compare("111")== 0) return '7';
    	else if(str.compare("110")== 0) return '6';
    	else if(str.compare("101")== 0) return '5';
    	else if(str.compare("100")== 0) return '4';
    	else if(str.compare("011")== 0) return '3';
    	else if(str.compare("010")== 0) return '2';
    	else if(str.compare("001")== 0) return '1';
    	else if(str.compare("000")== 0) return '0';
    	else if(str.compare("11")== 0) return '3';
    	else if(str.compare("10")== 0) return '2';
    	else if(str.compare("01")== 0) return '1';
    	else if(str.compare("00")== 0) return '0';
    	else if(str.compare("1")== 0) return '1';
    	else if(str.compare("0")== 0) return '0';
    }
    


  • und wie bringe ich ein char[1] in ein bitset<8> bzw. char[3] in ein bitset<24> ?



  • char b[]="1011";
    char h[256];
    long l=strtol(b,0,2);
    itoa(l,h,16);
    


  • char b[2] = 0x701;
    long tmp = strtol(b, 0, 2);
    
    bitset<16> bitseta(tmp);
    bitseta sollte dann "11100000001" enthalten!??
    
    dann sag ich dann:
    bitseta.set(0, 0); dh ich mache 0x702 daraus, dann will ichs wieder ins b[2] kopieren!
    
    char getHexCharacter(std::string str)
    {
        if(str.compare("1111") == 0) return 'F';
        else if(str.compare("1110") == 0) return 'E';
        else if(str.compare("1101")== 0) return 'D';
        else if(str.compare("1100")== 0) return 'C';
        else if(str.compare("1011")== 0) return 'B';
        else if(str.compare("1010")== 0) return 'A';
        else if(str.compare("1001")== 0) return '9';
        else if(str.compare("1000")== 0) return '8';
        else if(str.compare("0111")== 0) return '7';
        else if(str.compare("0110")== 0) return '6';
        else if(str.compare("0101")== 0) return '5';
        else if(str.compare("0100")== 0) return '4';
        else if(str.compare("0011")== 0) return '3';
        else if(str.compare("0010")== 0) return '2';
        else if(str.compare("0001")== 0) return '1';
        else if(str.compare("0000")== 0) return '0';
        else if(str.compare("111")== 0) return '7';
        else if(str.compare("110")== 0) return '6';
        else if(str.compare("101")== 0) return '5';
        else if(str.compare("100")== 0) return '4';
        else if(str.compare("011")== 0) return '3';
        else if(str.compare("010")== 0) return '2';
        else if(str.compare("001")== 0) return '1';
        else if(str.compare("000")== 0) return '0';
        else if(str.compare("11")== 0) return '3';
        else if(str.compare("10")== 0) return '2';
        else if(str.compare("01")== 0) return '1';
        else if(str.compare("00")== 0) return '0';
        else if(str.compare("1")== 0) return '1';
        else if(str.compare("0")== 0) return '0';
    }
    
    b[0] = getHexCharacter(bitseta.to_string().sub_str(0, 8));
    b[1] = getHexCharacter(bitseta.to_string().sub_str(8, 8));
    


  • bitset schrieb:

    hallo,

    wie kann man ein char test[1] oder char test mit einem bitset<8> initialisieren?
    bitset hat ja die funktion to_string(); da komme ich einen std::string.

    bye

    char test[1];
    bitset<8> bits(static_cast<unsigned long>(test[0]));
    

    Was willst du eigentlich machen?



  • ich habe char arrays will aber std::bitset dafür verwenden...



  • Dann mach das doch.



  • sowas in der art:

    void binary_str_to_char_array(std::string str_binary, char *array, unsigned int array_length)
    {
       for(unsigned int i = 0; i < array_lenth; i++)
       {
    	*(array++) = getHexCharacter(str_binary.sub_str(i*8, 8));
       }
    }
    
    std::bitset<hmm??> char_array_to_bit_set(char *array, unsigned int array_length)
    {
       bitset<array_length> bits(static_cast<unsigned long>(array[hmm??]));
    
       return bits;
    }
    


  • Äh, du willst also einen String voller 1 und 0 in ein bitset verwandeln mit Hilfe der beiden Methoden?



  • ja,

    ich glaube boost::dynamic_bitset ist dafür geeignet:

    unsigned char data[2] = {211,31};
    boost::dynamic_bitset<unsigned char> bitbuf(data, &data[2]);
    
    unsigned char data2[2];
    memset(&data2, 0, sizeof(data2));
    data2 = bitbuf.get_allocator(); // funzt so nicht, wie geht das?
    


  • Zeig doch mal mehr Code. Ich habe immer noch keinen blassen Schimmer von dem was du überhaupt vor hast. Bisher würde ich sagen: Bullshit.


Anmelden zum Antworten