0

我想将整数拆分为数字,然后将每个数字转换为 ASCII(在 C 编程语言中)。

例子:

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 位长(十六进制),我仍然需要 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

好吧,你的问题没有给我足够的信息来回答驱魔的“精神”......但是你去:

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

sprintf如果您想存储结果,可以轻松地将其修改为。

于 2012-07-31T18:22:30.320 回答
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 回答
0

由于这是家庭作业,我不会直接解决这个问题。

首先,我对拆分“整数”的意思感到困惑。看起来(从示例中)您希望拆分十六进制数,而不是十进制数。无论哪种方式,想想如何构建一个数字:123 = 1*100 + 2*10 + 3*1 = 1*10^2 + 2*10^1 + 3*10^0。您如何区分 1 与 2 和 3?(提示,使用乘法的相反数。)(另一个提示,如果它是十六进制,请记住将基数从 10 更改为 16)

现在假设您已将数字拆分为单独的变量。好吧,ascii 表以非常“方便”的方式构建。查找表格,找到所需数字的 ascii 值。从那里,将是一个简单的常量加法/减法来获得数字的 ascii 表示。

(另一个提示)我假设您的意思是将 a 转换int为 a char。请记住,这些位只是数据。您可以更改数据的表示。搜索“将 int 转换为 char”。

于 2012-07-31T17:48:13.727 回答