7

All I want is to go from 'a' to 0110 0001

David Hurrolds
  • 73
  • 1
  • 1
  • 3

5 Answers5

7

if you write int i = 'a'; you get you want since all numbers physically are base 2. But if it's needed to get a string with ones and zeros then here is an example

/* itoa example */
#include <stdio.h>
#include <stdlib.h>

int main ()
{
  int i = 'a';
  char buffer [33]; //the variable you will store i's new value (binary value) in
  _itoa_s(i,buffer,2);
  printf ("binary: %s\n",buffer);
  return 0;
}
Andrey Sboev
  • 7,454
  • 1
  • 20
  • 37
  • 6
    Note that `itoa()` isn't standard. There is no standard function to get a binary representation of an integer. – AProgrammer Apr 22 '11 at 07:56
1
#include <cmath>
#include <iostream>
#include <string>
#include <cstring>
#include <cctype>
#include <cstdlib>

using namespace std;

char*  toBinary(char* doubleDigit)
{
  int digit = atoi(doubleDigit);
  char* binary = new char();

  int x = 0 ;
  for(int i = 9 ; digit != 0; i--)
  {
    //cout << "i"<< i<<endl;
    if(digit-pow(2,i)>=0)
    {
      digit = digit- pow(2,i);
      binary[x]= '2';
      binary[x+1]='^';
      binary[x+2]=i+'0';
      binary[x+3]= '+';
    x+=4;

    }

  }
  return binary;
}

int main()
{
 char value[3]={'8','2','0'};



 cout<< toBinary(value); 



  return 0 ;
}`enter code here`
Jacques
  • 11
  • 1
1

I may write an own one: Just be careful!

enum
{
  O32_LITTLE_ENDIAN = 0x03020100ul,
  O32_BIG_ENDIAN = 0x00010203ul,
  O32_PDP_ENDIAN = 0x01000302ul
};

static const union { unsigned char bytes[4]; uint32_t value; } o32_host_order =
  { { 0, 1, 2, 3 } };

#define O32_HOST_ORDER (o32_host_order.value)


template <class T> ostream & operator << ( ostream &os, const T &value )
{
  size_t i = sizeof(T);
  const char * val = "01";
  const unsigned char * addr = reinterpret_cast<const unsigned char *>(&value);
// x86
#if ( O32_HOST_ORDER == O32_LITTLE_ENDIAN )
  while ( i > 0 )
  {
    --i;
    os << val[bool(addr[i] & 128)];
    os << val[bool(addr[i] & 64)];
    os << val[bool(addr[i] & 32)];
    os << val[bool(addr[i] & 16)];
    os << val[bool(addr[i] & 8)];
    os << val[bool(addr[i] & 4)];
    os << val[bool(addr[i] & 2)];
    os << val[bool(addr[i] & 1)];
  }
// PowerPC
#else
  size_t j = 0;
  while ( j < i )
  {
    os << val[bool(addr[j] & 128)];
    os << val[bool(addr[j] & 64)];
    os << val[bool(addr[j] & 32)];
    os << val[bool(addr[j] & 16)];
    os << val[bool(addr[j] & 8)];
    os << val[bool(addr[j] & 4)];
    os << val[bool(addr[j] & 2)];
    os << val[bool(addr[j] & 1)];
    ++j;
  }
#endif
  return os;
}

Big endian testing: link.

Community
  • 1
  • 1
Naszta
  • 7,560
  • 2
  • 33
  • 49
0
    #include "global.h" 
    #include <iostream> 
    using namespace std; 
    void binaryConvert(int number);
    static int n=0;
    char cipher[256]; // cipher text
    void binaryConvert(int number) {
    while (number > 0) {
    int bin = number % 2;
    number /= 2;
    cipher[n] = bin;
   }
 }
int main(){
 char c;
 int val=0;
 char buff[9];
 for (int i = 0; i < 8; i++)
 {
   cin >> c;
   val = static_cast<int>(c);
   binaryConvert(val);
 }
}
0

Here is a more flexible function you can use:

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

std::string ASCIITextToBinaryText(const std::string& text, const unsigned int blockSize = 8, const std::string& separator = " ")
{
    std::string binaryText(""), block;
    std::bitset<8U> asciiCharToBinary;

    for (unsigned int i = 0; i < text.length(); i++)
    {
        asciiCharToBinary = text[i];
        block += asciiCharToBinary.to_string();

        while (block.length() > blockSize)
        {
            binaryText += block.substr(0, blockSize);
            binaryText += separator;

            block = block.substr(blockSize, block.length() - blockSize);
        }
    }

    if (block.length() != 0)
    {
        binaryText += block;
    }

    return binaryText;
}


int main()
{
    //your example is a binary text with blocks of 4 bits and " " between blocks, like this:
    std::cout << ASCIITextToBinaryText("a", 4, " ") << std::endl;

    //another example can be blocks of 8 bits and as a block separator " "
    std::cout << ASCIITextToBinaryText("example", 8, " ") << std::endl;

    //13 bits blocks and "akdn213" block separator
    std::cout << ASCIITextToBinaryText("Hello World!", 13, "akdn213");
}
Claudiu HBann
  • 56
  • 1
  • 9
  • Would be more helpful to the poster if you added comments or explained how your code works. It's also kind of unclear how the poster is supposed to call the code. – elrobe Jul 30 '21 at 14:02
  • Idk man, seems obvious to me how he would call the function and the code is not that hard to understand... Let me adjust. – Claudiu HBann Jul 30 '21 at 14:11