Im attempting to do bitwise operations on a character string and want to use the bitset template. I am having some trouble, it doesnt seem to like to be constructed using a char* string or std::string... I'm knew to this particular template. Here is what I'm attempting:

std::bitset<3000> Line("abcdefghijklmnop...");

anyone any ideas? Would be much appreciated, I want to get into the mentality of using the C++ STL. :eek:

Recommended Answers

All 2 Replies

any ideas?

I'm not really sure, but it sort of sounds like you want to do something along this line...

#include <iostream>
#include <bitset>
#include <vector>
#include <algorithm>

int main()
{
   static const char init[] = "abcdefghijklmnop...";
   std::vector<std::bitset<8> > str(init, init + sizeof init);
   std::copy(str.begin(), str.end(),
      std::ostream_iterator<std::bitset<8> > (std::cout, "\n"));
   return 0;
}

/* my output
01100001
01100010
01100011
01100100
01100101
01100110
01100111
01101000
01101001
01101010
01101011
01101100
01101101
01101110
01101111
01110000
00101110
00101110
00101110
00000000
*/

Which I think is saying that I believe you need to do the bitset differently.

Thanks Dave. Maybe I should have explained my problem better though. I am getting a character string that represents a line in an image, in order to do a pixel count for that line of the image I need to get the value of individual bits of the characters. Here is what I have written:

#include <iostream>
#include <bitset>
#include <cstring>
#include <stdlib>

int main()
{
    long pixelCount = 0;
    char* pLine;
    long startX = 10;  //arbitrary starting point on line
    long endX   = 45; //arbitrary end point on line

    /* section of code that returns a char string pLine
        this line is 312 bytes long*/
    pLine = "HELLO";      //Used for example

    for(long x = startX; x < endX; x++)
    {
        char init = pLine[x];        //retrieving individual char
        std::bitset<8> bits(init);

        if(bits.any())                //checking if any bits of the char are on
        {
            for(int i = 0; i < 7; i++)
            {
                if(bits.test(i))
                {
                    pixelCount++;  //test each bit and if set increment count
                }
            }
        }
    }
    std::cout << pixelCount << std::endl;
    system("PAUSE");
    return 0;
}

Giving a count of 35

Originally I wanted to use the bitset::count on the entire char string but it wasn't possible to set up a bitset with the character string, so i tried to use it on just individual chars but got a compile error in Borland:

[Linker Error] Unresolved external '_STL::_Bs_G<bool>::_S_bit_count' referenced from C:\DOCUMENTS AND SETTINGS\MY DOCUMENTS\SRC

i was calling it like so:

bits.count();

The way I have done it is working fine, just thought if the bitset::count member was function was availaiable it would increase speed?!

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.