C++ 如何将char转换为ascii二进制代码
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5753271/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to convert char to it's ascii binary code
提问by David Hurrolds
All I want is to go from 'a' to 0110 0001
我想要的只是从 'a' 到 0110 0001
回答by Andrey Sboev
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
如果你写int i = 'a';
你会得到你想要的,因为所有的数字都是以 2 为底的。但是如果需要得到一个带有 1 和 0 的字符串,那么这里是一个例子
/* 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;
}
回答by Naszta
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.
大端测试:链接。
回答by Jacques
#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`
回答by max Hyman
#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);
}
}