How to convert char to it's ascii binary code
All I wan开发者_运维知识库t is to go from 'a' to 0110 0001
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;
}
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.
#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`
#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);
}
}
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");
}
精彩评论