C2A_Core
ascii_conv.c
[詳解]
1 #pragma section REPRO
2 #include "ascii_conv.h"
3 
4 unsigned char ascii2hex(unsigned short ascii)
5 {
6  unsigned char hex = 0x00;
7  unsigned char* ascii_p = (unsigned char*)&ascii;
8 
9  if ((ascii_p[0] >= '0') && (ascii_p[0] <= '9'))
10  {
11  hex |= (unsigned char)(((ascii_p[0] - '0') & 0x0F) << 4); // ビッグエンディアン用
12  // hex |= (unsigned char)(((ascii_p[0] - '0') & 0x0F) << 0); // リトルエンディアン用
13  }
14  else if ((ascii_p[0] >= 'A') && (ascii_p[0] <= 'F'))
15  {
16  hex |= (unsigned char)(((ascii_p[0] - 'A' + 10) & 0x0F) << 4); // ビッグエンディアン用
17  // hex |= (unsigned char)(((ascii_p[0] - 'A' + 10) & 0x0F) << 0); // リトルエンディアン用
18  }
19  else if ((ascii_p[0] >= 'a') && (ascii_p[0] <= 'f'))
20  {
21  hex |= (unsigned char)(((ascii_p[0] - 'a' + 10) & 0x0F) << 4); // ビッグエンディアン用
22  // hex |= (unsigned char)(((ascii_p[0] - 'a' + 10) & 0x0F) << 0); // リトルエンディアン用
23  }
24 
25  if ((ascii_p[1] >= '0') && (ascii_p[1] <= '9'))
26  {
27  hex |= (unsigned char)(((ascii_p[1] - '0') & 0x0F) << 0); // ビッグエンディアン用
28  // hex |= (unsigned char)(((ascii_p[1] - '0') & 0x0F) << 4); // リトルエンディアン用
29  }
30  else if ((ascii_p[1] >= 'A') && (ascii_p[1] <= 'F'))
31  {
32  hex |= (unsigned char)(((ascii_p[1] - 'A' + 10) & 0x0F) << 0); // ビッグエンディアン用
33  // hex |= (unsigned char)(((ascii_p[1] - 'A' + 10) & 0x0F) << 4); // リトルエンディアン用
34  }
35  else if ((ascii_p[1] >= 'a') && (ascii_p[1] <= 'f'))
36  {
37  hex |= (unsigned char)(((ascii_p[1] - 'a' + 10) & 0x0F) << 0); // ビッグエンディアン用
38  // hex |= (unsigned char)(((ascii_p[1] - 'a' + 10) & 0x0F) << 4); // リトルエンディアン用
39  }
40 
41  return (hex);
42 }
43 
44 
45 unsigned short hex2ascii(unsigned char hex)
46 {
47  unsigned short ascii = 0x0000;
48  unsigned char* ascii_p = (unsigned char*)&ascii;
49 
50  if (((hex >> 4) & 0x0F) <= 0x09)
51  {
52  ascii_p[0] = (unsigned char)(((hex >> 4) & 0x0F) + '0'); // ビッグエンディアン用
53  // ascii_p[1] = (unsigned char)(((hex >> 4) & 0x0F) + '0'); // リトルエンディアン用
54  }
55  else if (((hex >> 4) & 0x0F) >= 0x0A)
56  {
57  ascii_p[0] = (unsigned char)((((hex >> 4) & 0x0F) + 'A') - 10); // ビッグエンディアン用
58  // ascii_p[1] = (unsigned char)((((hex >> 4) & 0x0F) + 'A') - 10); // リトルエンディアン用
59  }
60 
61  if (((hex >> 0) & 0x0F) <= 0x09)
62  {
63  ascii_p[1] = (unsigned char)(((hex >> 0) & 0x0F) + '0'); // ビッグエンディアン用
64  // ascii_p[0] = (unsigned char)(((hex >> 0) & 0x0F) + '0'); // リトルエンディアン用
65  }
66  else if (((hex >> 0) & 0x0F) >= 0x0A)
67  {
68  ascii_p[1] = (unsigned char)((((hex >> 0) & 0x0F) + 'A') - 10); // ビッグエンディアン用
69  // ascii_p[0] = (unsigned char)((((hex >> 0) & 0x0F) + 'A') - 10); // リトルエンディアン用
70  }
71 
72  return (ascii);
73 }
74 #pragma section
unsigned char ascii2hex(unsigned short ascii)
Definition: ascii_conv.c:4
unsigned short hex2ascii(unsigned char hex)
Definition: ascii_conv.c:45