如何从十进制数字中解析一个数字?

时间:2014-04-12 18:44:59

标签: c parsing ascii

如何将包含两位数的字母转换为十进制数,然后一次只解析一位数?例如......

char letter = 'D';
char firstDigit, secondDigit;

' d'是十进制的68,现在这就是我想要除以我的两个变量的十进制数。

firstDigit = 6

secondDigit = 8

我怎样才能做到这一点?谢谢!

3 个答案:

答案 0 :(得分:0)

让我们将您的ASCII字符串称为编码压缩字符串的数字。我们定义了一个函数packed_get,读取这样一个打包字符串所包含的k个数字:

/* packed_get(S, K)
    Return the K-th digit of S. */
char
packed_get(char *s, int k)
{
  int a = -1;
  if(k % 2)
  {
    a = s[k/2] % 10;
  }
  else
  {
    a = s[k/2] / 10;
  }
  return '0' + a;
}

return语句假定ASCII编码并将数字作为表示数字的字符返回,而不是数字本身。如果返回数字更合适,您可以轻松更改此项。我们需要迭代压缩字符串的第二个函数是一个包含长度的函数,即我们可以从这样的字符串中读取的位数:

/* packed_length(S)
    Return the length of S. */
int
packed_length(char *s)
{
  return 2*strlen(s);
}

以下程序说明了这两个功能的使用。它会将DEMONSTRATION解压缩到68697779788384826584737978

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

/* packed_length(S)
    Return the length of S. */
int
packed_length(char *s)
{
  return 2*strlen(s);
}

/* packed_get(S, K)
    Return the K-th digit of S. */
char
packed_get(char *s, int k)
{
  int a = -1;
  if(k % 2)
  {
    a = s[k/2] % 10;
  }
  else
  {
    a = s[k/2] / 10;
  }
  return '0' + a;
}

int
main()
{
  char* demo = "DEMONSTRATION";
  for(int i = 0; i < packed_length(demo); ++i)
  {
    putchar(packed_get(demo, i));
  }
  return EXIT_SUCCESS;
}

答案 1 :(得分:-1)

int firstDigit = ((int)letter)/10;
int secondDigit = ((int)letter)%10;

答案 2 :(得分:-2)

如果是Java:

char letter = 'D';

int intLetter = (int) letter;
char[] digits = Integer.toString(intLetter).toCharArray();

现在,您可以将数字数组中的两位数字转换回整数:

digits[0] = 6
digits[1] = 8

然后你可以用那些来执行任何操作。

您甚至可以在以下行中执行此操作:

char[] digits = Integer.toString((int) letter).toCharArray();