将int转换为ASCII字符


80

我有

int i = 6;

而且我要

char c = '6'

通过转换。有什么简单的建议吗?

编辑: 我也需要生成一个随机数,并将其转换为char,然后添加“ .txt”并在ifstream中访问它。

Answers:


338

简单的方法:

char digits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
char aChar = digits[i];

更安全的方法:

char aChar = '0' + i;

通用方式:

itoa(i, ...)

方便的方式:

sprintf(myString, "%d", i)

C ++方式:(取自Dave18答案)

std::ostringstream oss;
oss << 6;

上司方式:

乔,给我写一个int到char转换器

Studboss方式:

char aChar ='6';

乔的方式:

char aChar ='6'; // int i = 6;

美国航空航天局的方式:

//正在等待卫星回复...

外星人的方式:“ 9”

//问候。

神的方式:

布鲁,我建造了

彼得潘的方式:

char aChar;

switch (i)
{
  case 0:
    aChar = '0';
    break;
  case 1:
    aChar = '1';
    break;
  case 2:
    aChar = '2';
    break;
  case 3:
    aChar = '3';
    break;
  case 4:
    aChar = '4';
    break;
  case 5:
    aChar = '5';
    break;
  case 6:
    aChar = '6';
    break;
  case 7:
    aChar = '7';
    break;
  case 8:
    aChar = '8';
    break;
  case 9:
    aChar = '9';
    break;
  default:
    aChar = '?';
    break;
}

圣诞老人的方式:

//Wait till Christmas!
sleep(457347347);

重力的方式:

//什么

'6'(Jersey)Mikes'™方式:

//

所以方式:

伙计们,如何避免阅读C ++入门指南?

我的方式:

或高速公路。

评论:我已经添加了Handy方式和C ++方式(具有完整的集合),并将其保存为Wiki。

编辑:满意吗?


15
你的意思是“老大”,如卓越,但我看它作为“老大”,如“布鲁斯·斯普林斯廷是老板。” 也许您可以针对这种情况进行修改?
g33kz0r

7
关于乔的方式?还是美国航空航天局的方式?还是外星人的方式?还是神明的方式?还是彼得潘的方式?圣诞老人的方式怎么样?还是重力的方式?您应该开始清单吗?也许要检查两次以防万一您错过了什么?
AbstractDissonance

2
@AbstractDissonance可以通过Mikes Way™获得,...我喜欢一些Jersey Mikes。
cb88'8

你去!:)
安德鲁(Andrew)

好。仍然不知道如何轻松地将整数= 31345转换为ascii字符串?BTW:char * digits =“ 0123456789”; 字符aChar = * digits + i;
TomeeNS

28

这仅适用于整数0-9,但您的问题似乎表明可能就足够了。

它通过将char的ASCII值添加'0'到整数位数来工作。

int i=6;
char c = '0'+i;  // now c is '6'

例如:

'0'+0 = '0'
'0'+1 = '1'
'0'+2 = '2'
'0'+3 = '3'

编辑

不清楚您的意思是“为字母工作”吗?如果您想要字母表的第5个字母:

int i=5;
char c = 'A'-1 + i; // c is now 'E', the 5th letter.

请注意,因为在C / Ascii中,A被认为是字母第0个字母,所以我做了一个负-1来补偿通常理解的第5个字母的含义。

根据您的具体情况进行调整。
(和测试-测试-测试!您编写的任何代码)


在小写和大写字母之间进行选择时会造成混淆。
user963241 2011年

4
好吧,您需要告诉我们您想要什么。“为字母工作”实际上不是非常描述性的。
EboMike 2011年

14

仅供参考,如果您想要多个位数,则可以使用sprintf:

char txt[16];
int myNum = 20;
sprintf(txt, "%d", myNum);

然后,第一个数字位于txt [0]中的char中,依此类推。

(这是C方法,而不是C ++方法。C++方法将是使用字符串流。)


3
总是喜欢snprintfsprintf(考虑128个的整数或任何一个假设的系统)。无论如何,+ 1是一种不会破坏数字不连续的字符集的方法。
Mark B

2
@Mark B:标准C要求数字是连续的。
Billy ONeal

@Mark Right,从缓冲区溢出的角度来看,这绝对是安全的。
Nathan S.

4

我的工作方式是:

char to int
char var;
cout<<(int)var-48;
    
int to char
int var;
cout<<(char)(var|48);

我编写这些函数进行转换:

int char2int(char *szBroj){
    int counter=0;
    int results=0;
    while(1){
        if(szBroj[counter]=='\0'){
            break;
        }else{
            results*=10;
            results+=(int)szBroj[counter]-48;
            counter++;
        }
    }
    return results;
}

char * int2char(int iNumber){
    int iNumbersCount=0;
    int iTmpNum=iNumber;
    while(iTmpNum){
        iTmpNum/=10;
        iNumbersCount++;
    }
    char *buffer=new char[iNumbersCount+1];
    for(int i=iNumbersCount-1;i>=0;i--){
        buffer[i]=(char)((iNumber%10)|48);
        iNumber/=10;
    }
    buffer[iNumbersCount]='\0';
    return buffer;
}

3

这就是我将数字转换为ASCII码的方式。十六进制代码中的0到9是0x30-0x39。6将是0x36。

unsigned int temp = 6;
or you can use unsigned char temp = 6;
unsigned char num;
 num = 0x30| temp;

这将为您提供6的ASCII值。对0-9进行相同的操作

将ASCII转换为数值,我想到了这段代码。

unsigned char num,code;
code = 0x39; // ASCII Code for 9 in Hex
num = 0&0F & code;

2

与abelenky建议的字符算术相比,我更喜欢这种方法,因为它不依赖于使用ASCII字符集(即使对于许多应用程序来说这是一个相当安全的假设)。但是,itoa将结果存储在字符串中,因此您需要提供一个字符数组并从中提取字符。如果您对新手进行了编辑以显示这些额外步骤,那么您的答案将对新手更有帮助。
A. Levy

5
-1 itoa(用于非标准MS功能)以及链接到C和C ++ [mis]信息的最差站点都可以。
R .. GitHub STOP HELPING ICE

C ++中的“标准”方式将使用流,到目前为止提到的所有其他方法都存在一些问题。
Gene Bushuyev 2011年

@R ..:不好意思,那么您可以链接C和C ++的最佳网站吗?
新手,

5
好吧,那么它比cplusplus.com逊色
Newbie

1

我想

std::to_string(i)

可以完成工作,它是一个重载函数,可以是任何数字类型,例如int,double或float


1
例如,char c = to_string(9)[0];
iceSea '17

0

“我有int = 6;我想通过转换将char c ='6'。有什么简单的建议吗?”

只有10个数字。因此,编写一个函数,其取值范围为0-9,并返回ascii代码。只需在ascii表中查找并使用ifs或select case编写函数即可。


0

替代方法,但是不标准。

int i = 6;
char c[2];
char *str = NULL;
if (_itoa_s(i, c, 2, 10) == 0)
   str = c;

或使用标准c ++字符串流

 std::ostringstream oss;
 oss << 6;

itoa是非标准且不安全的(可能导致缓冲区溢出)。
EboMike 2011年

好的,您现在已将其编辑为_s版本。仍然是非标准的,但是我删除了我的下注!
EboMike 2011年

对!我输入了错误的对象名称'oss':)
cpx

0

在上大学时,我收集了发现的数据并给出了以下结果:

“输入由带有多个整数的单行组成,并由空格分隔。条目的末尾由数字-1标识,不应处理该数字。”

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
    char numeros[100]; //vetor para armazenar a entrada dos numeros a serem convertidos
    int count = 0, soma = 0;

    cin.getline(numeros, 100);

    system("cls"); // limpa a tela

    for(int i = 0; i < 100; i++)
    {
        if (numeros[i] == '-') // condicao de existencia do for
            i = 100;
        else
        {
            if(numeros[i] == ' ') // condicao que ao encontrar um espaco manda o resultado dos dados lidos e zera a contagem
            {
                if(count == 2) // se contegem for 2 divide por 10 por nao ter casa da centena
                    soma = soma / 10;
                if(count == 1) // se contagem for 1 divide por 100 por nao ter casa da dezena
                    soma = soma / 100;


                cout << (char)soma; // saida das letras do codigo ascii
                count = 0;

            }
            else
            {
                count ++; // contagem aumenta para saber se o numero esta na centena/dezena ou unitaria
                if(count == 1)
                    soma =  ('0' - numeros[i]) * -100; // a ideia é que o resultado de '0' - 'x' = -x (um numero inteiro)
                if(count == 2)
                    soma = soma + ('0' - numeros[i]) * -10; // todos multiplicam por -1 para retornar um valor positivo
                if(count == 3)
                    soma = soma + ('0' - numeros[i]) * -1; /* caso pense em entrada de valores na casa do milhar, deve-se alterar esses 3 if´s
        alem de adicionar mais um para a casa do milhar. */
            }
        }
    }

    return 0;
}

评论是葡萄牙语,但我认为您应该理解。如有任何疑问,请给我发送有关linkedin的消息:https : //www.linkedin.com/in/marcosfreitasds/


1
如果您或其他人可以翻译评论,那就太好了!
csabinho

-3
          A PROGRAM TO CONVERT INT INTO ASCII.




          #include<stdio.h>
          #include<string.h>
          #include<conio.h>

           char data[1000]= {' '};           /*thing in the bracket is optional*/
           char data1[1000]={' '};
           int val, a;
           char varray [9];

           void binary (int digit)
          {
              if(digit==0)
               val=48;
              if(digit==1)
               val=49;
              if(digit==2)
               val=50;
              if(digit==3)
               val=51;
              if(digit==4)
               val=52;
              if(digit==5)
               val=53;
              if(digit==6)
               val=54;
              if(digit==7)
               val=55;
              if(digit==8)
               val=56;
              if(digit==9)
                val=57;
                a=0;

           while(val!=0)
           {
              if(val%2==0)
               {
                varray[a]= '0';
               }

               else
               varray[a]='1';
               val=val/2;
               a++;
           }


           while(a!=7)
          {
            varray[a]='0';
            a++;
           }


          varray [8] = NULL;
          strrev (varray);
          strcpy (data1,varray);
          strcat (data1,data);
          strcpy (data,data1);

         }


          void main()
         {
           int num;
           clrscr();
           printf("enter number\n");
           scanf("%d",&num);
           if(num==0)
           binary(0);
           else
           while(num>0)
           {
           binary(num%10);
           num=num/10;
           }
           puts(data);
           getch();

           }

我检查了我的编码及其工作是否正常。如果有用,请告诉我。谢谢。


1
您可以处理缩进...,并仔细考虑该代码中的其他问题。
哈珀
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.