C:拆分整数并将其转换为ASCII

时间:2012-07-31 17:31:06

标签: c integer ascii uart

我想将整数拆分成数字,然后将每个数字转换为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 个答案:

答案 0 :(得分:2)

使用数学:x = x 1·16²+ x 2·16 + x 3

使用查找表查看数字是什么:

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;

答案 1 :(得分:1)

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

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

如果要存储结果,可以轻松将其修改为sprintf

答案 2 :(得分: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代码。我必须试着告诉我这是你要找的东西。

答案 3 :(得分: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表示。

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