字符串检测二——BCD转码

描述:给定一串数字,进行BCD编码,编码完成后以8Bit为单位输出对应的十进制数值,如果给定字符串是奇数位,编码时需要在最高位补0.

简单BCD码:十进制数值0~9,分别对应4bit二进制编码 0000~1001

给定数字串1234,对应BCD码为0001,0010,0011,0100,以8bit为单位输出十进制数值为:18 52

给定数字串123,对应BCD码为0000 0001 0010 0011(最高位补0),由高位开始以8bit为单位输出十进制数值为:135

输入:只考虑输入串是正整数且位数不超过10位的情况,异常不考虑。

输出:输出时不需要空格间隔。

样例输入 :123

样例输出: 135

 1 #include <stdio.h>

 2 #include <stdlib.h>

 3 #include <iostream>

 4 #include <math.h>

 5 char* BCDChange(char a)

 6 {

 7         switch (a)

 8         {

 9            case '0':

10                    return "0000";

11                    break;

12            case '1':

13                    return "0001";

14                    break;

15            case '2':

16                    return "0010";

17                    break;

18            case '3':

19                    return "0011";

20                    break;

21            case '4':

22                    return "0100";

23                    break;

24            case '5':

25                    return "0101";

26                    break;

27            case '6':

28                    return "0110";

29                    break;

30            case '7':

31                    return "0111";

32                    break;

33            case '8':

34                    return "1000";

35                    break;

36            case '9':

37                    return "1001";

38                    break;

39         }

40 }

41 int main() 

42 {

43         char input[10]="\0";

44         char output[10]="\0";

45         char tmp[3]="\0";

46         scanf("%s",input);

47         int len = 4 * strlen(input);

48         char bcd[100] ="\0";

49         for (size_t i = 0; i <strlen(input);i++)

50         {

51                 char *pBCD=BCDChange(input[i]);

52                 strcat(bcd,pBCD);

53         }

54         if ((strlen(bcd))%8)

55         {

56                 char addstr[256] = "0000";

57                 strcat(addstr,bcd);

58                 memset(bcd,0,strlen(bcd));

59                 strcpy(bcd,addstr);

60         }

61         int len_bcd = strlen(bcd);

62         printf("%s\n", bcd);

63         int a = 0;

64         for (size_t i = 0; i<strlen(bcd) ; i = i+ 8)

65         {

66                 a = 0;

67                 memset(tmp, 0, strlen(tmp));

68                 size_t j = 0;

69                 for (j = 0; j <8;j++)

70                 {

71                         if (bcd[i+j]=='1')

72                         {

73                                 a = a + (int)pow(2, 7-j);

74 

75                         }

76                 }

77                 _itoa(a, tmp, 10);

78                 strcat(output, tmp);                        

79         }

80         printf("%s\n",output);

81         getchar();

82         getchar();

83         return 0;

84 }

 

你可能感兴趣的:(字符串)