如何将字符转换为其ASCII二进制代码

7
我想要的只是从'a'到0110 0001的转换。

请具体说明。 - idursun
2
你的意思是想要显示八个字符 '0110 0001' 而不是 'a' 吗? - pavium
5个回答

7

如果你写int i = 'a';,你会得到你想要的结果,因为所有数字在物理上都是二进制的。但如果需要获取一个由一和零组成的字符串,则可以参考以下示例:

/* 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;
}

6
请注意 itoa() 函数不是标准函数。没有标准函数可以得到一个整数的二进制表示。 - AProgrammer

1

我可能会写一个自己的:要小心!

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;
}

大端测试:链接


2
os << "01"[bool(addr[i] & N)]; ;-P - Tony Delroy
我其实是在开玩笑...嗯,抱歉...'0' + bool(addr[i] & N) 可能更快一些,而且也不那么hacky了... :-). 无论如何还是加1。 - Tony Delroy

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`

0

这里有一个更加灵活的函数可以使用:

#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");
}

如果您添加注释或解释代码的工作原理,对于发帖者会更有帮助。同时,还不太清楚发帖者应该如何调用这段代码。 - elrobe
我不知道,伙计,对我来说他该如何调用函数似乎很明显,而且代码也不难理解...让我来调整一下。 - Claudiu HBann

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);
 }
}

请问您能否提供更具体的细节,说明您的代码示例是做什么的? - Bender Bending

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接