web-dev-qa-db-ja.com

intをASCII文字に変換します

私は持っています

int i = 6;

そして私は欲しい

char c = '6'

変換によって。提案する簡単な方法はありますか?

編集:また、乱数を生成し、charに変換し、「。txt」を追加してifstreamでアクセスする必要があります。

57
user963241

単純な方法:

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へのコンバーターを書いて

スタッドボスの方法:

char aChar = '6';

ジョーの方法:

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

Nasaの方法:

//衛星からの返信を待っています...

エイリアンの道: '9'

//ご挨拶。

神の道:

Bruh私はこれを構築しました

ピーターパンの方法:

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 '™way:

//

SOの方法:

皆さん、C++の初心者向けガイドを読むのを避けるにはどうすればよいですか?

私の方法:

または高速道路。

コメント:Handy wayとC++ wayを追加して(完全なコレクションを作成するため)、これをwikiとして保存しています。

編集:満足?

これは、0〜9の整数でのみ機能しますが、あなたの質問はそれで十分かもしれないことを示唆しているようです。

これは、char '0'のASCII値を整数に追加することで機能します。

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はアルファベットの番目の文字と見なされるため、マイナス1を実行して、5番目の文字の通常理解される意味を補正することに注意してください。

特定の状況に応じて適切に調整します。
(およびtest-test-test!記述したコード)

24
abelenky

参考までに、1桁以上の数字が必要な場合は、sprintfを使用できます。

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

その後、最初の桁はtxt [0]の文字になり、以下同様に続きます。

(これはC++のアプローチではなく、Cのアプローチです。C++の方法は文字列ストリームを使用することです。)

10
Nathan S.

この仕事をする私の方法は:

    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;

}

これは、数値をASCIIコードに変換する方法です。 16進コードの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
Dorato
2
Newbie

別の方法ですが、非標準です。

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;
0
cpx

私はそう思う

std::to_string(i)

仕事をすることができます、それはオーバーロードされた関数です、私は任意の数値型にすることができます

0
iceSea

「int i = 6があり、変換によってchar c = '6'が必要です。提案する簡単な方法はありますか?」

数字は10個のみです。したがって、0〜9のintを取り、ASCIIコードを返す関数を作成します。 asciiテーブルで検索し、ifsまたは選択ケースを使用して関数を記述します。

0
jun