Using STL how do I convert a variable to a binary string

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • young_leaf

    #1

    Using STL how do I convert a variable to a binary string

    Using STL how do I convert a variable to a binary string but with
    special case which
    for example BYTE x, i need only the first 3 bits of this byte, is that
    possible?

    to be more specific,
    from that byte i want to generate (so valid values for x will be 0-5)

    000
    001
    010
    011
    100
    101
    110 - not used
    111 - not used



    --
    yl

  • JustBoo

    #2
    Re: Using STL how do I convert a variable to a binary string

    On 24 Jan 2006 10:48:39 -0800, "young_leaf " <kerby.martino@ gmail.com>
    wrote:[color=blue]
    >Using STL how do I convert a variable to a binary string but with
    >special case which
    >for example BYTE x, i need only the first 3 bits of this byte, is that
    >possible?[/color]

    std::bitset

    I quite like it. You can manipulate each bit in a simple way.

    HTH - Good Luck

    Comment

    • Thomas Tutone

      #3
      Re: Using STL how do I convert a variable to a binary string

      young_leaf wrote:[color=blue]
      > Using STL how do I convert a variable to a binary string but with
      > special case which
      > for example BYTE x, i need only the first 3 bits of this byte, is that
      > possible?
      >
      > to be more specific,
      > from that byte i want to generate (so valid values for x will be 0-5)
      >
      > 000
      > 001
      > 010
      > 011
      > 100
      > 101
      > 110 - not used
      > 111 - not used[/color]

      If by "STL," you mean the C++ standard library, then I think a
      std::bitset does what you need, and specifically its to_string() member
      function. You'll need to mask or reset the bits you don't need.

      Best regards,

      Tom

      Comment

      • Victor Bazarov

        #4
        Re: Using STL how do I convert a variable to a binary string

        young_leaf wrote:[color=blue]
        > Using STL how do I convert a variable to a binary string but with
        > special case which
        > for example BYTE x, i need only the first 3 bits of this byte, is that
        > possible?[/color]

        Everything is possible.

        Use 'ostringstream' . Write two functions: one to convert 'BYTE', and the
        other to convert everything else. The one that converts 'BYTE' should
        also check the range.
        [color=blue]
        > to be more specific, [...][/color]

        Yeah, yeah, we got that.

        V

        Comment

        • Mike Wahler

          #5
          Re: Using STL how do I convert a variable to a binary string


          "young_leaf " <kerby.martino@ gmail.com> wrote in message
          news:1138128519 .306558.216940@ o13g2000cwo.goo glegroups.com.. .[color=blue]
          > Using STL how do I convert a variable to a binary string but with
          > special case which
          > for example BYTE x, i need only the first 3 bits of this byte, is that
          > possible?
          >
          > to be more specific,
          > from that byte i want to generate (so valid values for x will be 0-5)
          >
          > 000
          > 001
          > 010
          > 011
          > 100
          > 101
          > 110 - not used
          > 111 - not used[/color]

          #include <bitset>
          #include <climits>
          #include <iostream>
          #include <string>

          unsigned int bin_digits(unsi gned int i)
          {
          unsigned int result(1); /* count 0 as 1 bit */

          while(i--)
          {
          i /= 2;
          ++result;
          }

          return result;
          }

          std::string gen(unsigned int x, unsigned int mx = 5)
          {
          std::bitset<siz eof x * CHAR_BIT> bs(x);
          std::string s(bs.to_string( ));

          return (x <= mx) ? s.substr(s.size () - bin_digits(mx))
          : "out of range";
          }

          int main()
          {
          for(int i = 0; i < 10; ++i)
          std::cout << i << " : " << gen(i) << '\n';

          return 0;
          }

          Output:

          0 : 000
          1 : 001
          2 : 010
          3 : 011
          4 : 100
          5 : 101
          6 : out of range
          7 : out of range
          8 : out of range
          9 : out of range


          -Mike


          Comment

          • Pete Becker

            #6
            Re: Using STL how do I convert a variable to a binary string

            Mike Wahler wrote:[color=blue]
            >
            > #include <bitset>
            > #include <climits>
            > #include <iostream>
            > #include <string>
            >
            > unsigned int bin_digits(unsi gned int i)
            > {
            > unsigned int result(1); /* count 0 as 1 bit */
            >
            > while(i--)
            > {
            > i /= 2;
            > ++result;
            > }
            >
            > return result;
            > }
            >
            > std::string gen(unsigned int x, unsigned int mx = 5)
            > {
            > std::bitset<siz eof x * CHAR_BIT> bs(x);
            > std::string s(bs.to_string( ));
            >
            > return (x <= mx) ? s.substr(s.size () - bin_digits(mx))
            > : "out of range";
            > }
            >
            > int main()
            > {
            > for(int i = 0; i < 10; ++i)
            > std::cout << i << " : " << gen(i) << '\n';
            >
            > return 0;
            > }
            >[/color]

            Seems awfully complicated for such a simple transformation.

            #include <string>
            #include <iostream>

            std::string to_binary(unsig ned value)
            {
            if (5 < value)
            return "out of range";
            char res[4];
            res[3] = '\0';
            res[2] = (value & 0x01) ? '1' : '0';
            res[1] = (value & 0x02) ? '1' : '0';
            res[0] = (value & 0x04) ? '1' : '0';
            return res;
            }

            int main()
            {
            for(int i = 0; i < 10; ++i)
            std::cout << i << " : " << to_binary(i) << '\n';

            return 0;
            }

            Here's one that's even simpler:

            char *binary[7] =
            { "000", "001", "010", "011", "100", "101", "out of range" };

            std::string to_binary(unsig ned value)
            {
            if (6 < value)
            value = 6;
            return binary[value];
            }

            Of course, neither of these honors the artificial constraint that the
            code should use STL, if "STL" means "Standard Template Library".

            --

            Pete Becker
            Dinkumware, Ltd. (http://www.dinkumware.com)

            Comment

            • roberts.noah@gmail.com

              #7
              Re: Using STL how do I convert a variable to a binary string


              Pete Becker wrote:
              [color=blue]
              > Of course, neither of these honors the artificial constraint that the
              > code should use STL, if "STL" means "Standard Template Library".[/color]

              You could always do something like this:

              std::vector<int > v;
              int b = 42;
              do
              {
              v.push_back(i & 1 ? 1:0);
              }
              while (b >> 1)

              then...
              std::ostringstr eam out;
              std::copy(v.beg in(), v.end(), ostream_iterato r(out));

              std::string result = out.str();

              Yeah, it might be about the most inefficient way you could possibly do
              it (ok, I could probably come up with worst) but at least it uses the
              STL. ;)

              Comment

              Working...