0

整数を数字に分割し、各数字を (C プログラミング言語で) ASCII に変換したいと思います。

例:

int x = 0xABC
/* split integers */
int x1 = 0xA
int x2 = 0xB
int x3 = 0xC
/* convert integers to ASCII */
int x1 = 0x41
int x2 = 0x42
int x3 = 0x43

また、整数が 2 桁 (16 進数) しかない場合でも、3 つの分割が必要です。

int y = 0xBC
/* split integers */
int y1 = 0x0
int y2 = 0xB
int y3 = 0xC 
.
.
.

よろしくお願いします!

4

4 に答える 4

2

数学を使用: x = x₁ · 16² + x₂ · 16 + x₃</p>

ルックアップ テーブルを使用して、数字が何であるかを確認します。

static const char hex[16] = "0123456789ABCDEF";

y1 = hex[x1];
...

宿題に関する質問なので、完全な解決策は提供しません。


完全な解決策(理解しにくい):

// Divide by 16^n and take the modulo 16:
int x1 = (x >> 8) & 0xF; // == (x/256) % 16
int x2 = (x >> 4) & 0xF; // == (x/16) % 16
int x3 = (x >> 0) & 0xF; // == x % 16

int y1 = x1 < 10 ? x1+'0' : x1+'A'-10;
int y2 = x2 < 10 ? x2+'0' : x2+'A'-10;
int y3 = x3 < 10 ? x3+'0' : x3+'A'-10;
于 2012-07-31T17:36:10.513 に答える
1
             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();

               }

コーディングを確認しましたが、正常に動作しています。指定された整数をASCIIコードに変換します。それがあなたが探しているものかどうかを教えてください。

于 2012-10-31T11:41:21.647 に答える
1

わかりました、あなたの質問は、悪魔祓いの「精神」に答えるのに十分な情報を提供しませんでした...しかし、ここに行きます:

int x = 0xABC;
printf("%03X",x); // Result = "ABC"
x = 0xAB;
printf("%03X",x); // Result = "0AB"

sprintf結果を保存する場合は、簡単に変更できます。

于 2012-07-31T18:22:30.320 に答える
0

これは宿題なので、問題の直接的な解決策を示すつもりはありません。

まず、「整数」を分割するという意味で混乱しています。(例から)10進数ではなく16進数を分割したいようです。いずれにせよ、数値がどのように構築されるかを考えてみてください: 123 = 1*100 + 2*10 + 3*1 = 1*10^2 + 2*10^1 + 3*10^0. 1 と 2 および 3 をどのように区別しますか? (ヒント、乗算の反対を使用します。) (別のヒント、16 進数の場合は、基数を 10 から 16 に変更することを忘れないでください)

数字を個別の変数に分割したとします。さて、非常に「便利な」方法で構築されたASCIIテーブル。表を調べて、必要な数字の ascii 値を見つけます。そこから、数値のASCII表現を取得するための単純な定数の加算/減算になります。

(別のヒント) から に変換するつもりだと思いintますchar。ビットは単なるデータであることを忘れないでください。データの表現を変更することができます。「int から char へのキャスト」を検索します。

于 2012-07-31T17:48:13.727 に答える