簡體   English   中英

如何將char轉換為ascii二進制代碼

[英]How to convert char to it's ascii binary code

我想要的只是從 'a' 到 0110 0001

如果你寫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;
}
#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`

我可能會寫一個自己的:小心點!

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

大端測試: 鏈接

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

這是您可以使用的更靈活的功能:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM