Skip to content

Instantly share code, notes, and snippets.

@sora
Last active December 30, 2015 20:18
Show Gist options
  • Select an option

  • Save sora/7879335 to your computer and use it in GitHub Desktop.

Select an option

Save sora/7879335 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#define DEBUG
#define MAX_FRAME_LEN (9014)
#define _LF 0x10
#define _SPC 0x11
#define _SKP 0x20
const unsigned char _atob[] = {
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 0-7 */
_SKP, _SKP, _LF, _SKP, _SKP, _SKP, _SKP, _SKP, /* 8-15 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 16-23 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 24-31 */
_SPC, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 32-39 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 40-47 */
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 48-55 */
0x08, 0x09, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 56-63 */
_SKP, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, _SKP, /* 64-71 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 72-79 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 80-87 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 88-95 */
_SKP, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, _SKP, /* 96-103 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 104-111 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 112-119 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 120-127 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 128-135 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 136-143 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 144-151 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 152-159 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 160-167 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 168-175 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 176-183 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 184-191 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 192-199 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 200-207 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 208-215 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 216-223 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 224-231 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 232-239 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, /* 240-247 */
_SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP, _SKP }; /* 248-255 */
int atob0(FILE *fp)
{
char line[MAX_FRAME_LEN];
unsigned char c, *cp;
unsigned int frame_len;
while ( fgets(line, MAX_FRAME_LEN, fp) != NULL ) {
frame_len = 0;
cp = (unsigned char *)line;
while ((c = *(cp++)) != '\n') {
++frame_len;
}
}
return 0;
}
int atob1(FILE *fp)
{
unsigned char tmp_pkt[MAX_FRAME_LEN] = {0};
char line[MAX_FRAME_LEN];
unsigned char c, *cp;
unsigned int frame_len;
int tmp;
while ( fgets(line, MAX_FRAME_LEN, fp) != NULL ) {
frame_len = 0;
cp = (unsigned char *)line;
while ((c = *(cp++)) != '\n') {
// skip blank char
if (c == ' ')
continue;
// ascii to number
if (c >= '0' && c <= '9') {
tmp = (c - '0') << 4;
} else if (c >= 'A' && c <= 'F') {
tmp = (c - 'A' + 0xA) << 4;
} else if (c >= 'a' && c <= 'f') {
tmp = (c - 'a' + 0xA) << 4;
} else {
fprintf(stderr, "input data err: %c\n", c);
return 1;
}
c = *(cp++);
// ascii to number
if (c >= '0' && c <= '9') {
tmp_pkt[frame_len] = (tmp | (c - '0'));
} else if (c >= 'A' && c <= 'F') {
tmp_pkt[frame_len] = (tmp | (c - 'A' + 0xA));
} else if (c >= 'a' && c <= 'f') {
tmp_pkt[frame_len] = (tmp | (c - 'a' + 0xA));
} else {
fprintf(stderr, "input data err: %c\n", c);
return 1;
}
#ifdef DEBUG
printf(" %02X", tmp_pkt[frame_len]);
#endif
++frame_len;
}
#ifdef DEBUG
printf("\n");
#endif
}
return 0;
}
int atob2(FILE *fp)
{
unsigned char tmp_pkt[MAX_FRAME_LEN] = {0};
char line[MAX_FRAME_LEN];
unsigned char c, *cp;
unsigned int frame_len;
int tmp;
while ( fgets(line, MAX_FRAME_LEN, fp) != NULL ) {
frame_len = 0;
cp = (unsigned char *)line;
while ((c = *(cp++)) != '\n') {
// skip blank char
if (c == ' ')
continue;
// ascii to number
if ((tmp = _atob[c]) != _SKP) {
tmp <<= 4;
} else {
fprintf(stderr, "input data err: %c\n", c);
return 1;
}
c = *(cp++);
// ascii to number
if (_atob[c] != _SKP) {
tmp_pkt[frame_len] = (tmp | _atob[c]);
} else {
fprintf(stderr, "input data err: %c\n", c);
return 1;
}
#ifdef DEBUG
printf(" %02X", tmp_pkt[frame_len]);
#endif
++frame_len;
}
#ifdef DEBUG
printf("\n");
#endif
}
return 0;
}
int atob3(FILE *fp)
{
unsigned char tmp_pkt[MAX_FRAME_LEN] = {0};
char line[MAX_FRAME_LEN];
unsigned char *cp;
unsigned int frame_len;
int tmp1, tmp2;
while ( fgets(line, MAX_FRAME_LEN, fp) != NULL ) {
frame_len = 0;
cp = (unsigned char *)line;
while ((tmp1 = *(cp++)) != '\n') {
// skip blank char
if (tmp1 == ' ')
continue;
// ascii to number
tmp2 = *(cp++);
if (_atob[tmp1] != _SKP && _atob[tmp2] != _SKP) {
tmp_pkt[frame_len] = (_atob[tmp1] << 4) | _atob[tmp2];
} else {
fprintf(stderr, "input data err: %d %d\n", _atob[tmp1], _atob[tmp2]);
return 1;
}
#ifdef DEBUG
printf(" %02X", tmp_pkt[frame_len]);
#endif
++frame_len;
}
#ifdef DEBUG
printf("\n");
#endif
}
return 0;
}
int atob4(FILE *fp)
{
unsigned char tmp_pkt[MAX_FRAME_LEN] = {0};
char line[MAX_FRAME_LEN];
unsigned char *cp;
unsigned int frame_len;
int tmp1, tmp2;
while ( fgets(line, MAX_FRAME_LEN, fp) != NULL ) {
frame_len = 0;
cp = (unsigned char *)line;
while ((tmp1 = _atob[*(cp++)]) != _LF) {
// skip blank char
if (tmp1 == _SPC)
continue;
// ascii to number
tmp2 = _atob[*(cp++)];
if (tmp1 != _SKP && tmp2 != _SKP) {
tmp_pkt[frame_len] = (tmp1 << 4) | tmp2;
} else {
fprintf(stderr, "input data err: %02X %02X\n", tmp1, tmp2);
return 1;
}
#ifdef DEBUG
printf(" %02X", tmp_pkt[frame_len]);
#endif
++frame_len;
}
#ifdef DEBUG
printf("\n");
#endif
}
return 0;
}
int main(int argc, char **argv)
{
FILE *fp;
int ret;
if (argc != 3) {
fprintf(stderr, "usage: ./atob [packet data] [mode: 0 1 2 3 4]\n");
exit(EXIT_FAILURE);
}
if ((fp = fopen(argv[1], "r")) == NULL) {
fprintf(stderr, "can't open file: %s\n", argv[1]);
exit(EXIT_FAILURE);
}
if ( !strcmp(argv[2], "0"))
ret = atob0(fp);
if ( !strcmp(argv[2], "1"))
ret = atob1(fp);
if ( !strcmp(argv[2], "2"))
ret = atob2(fp);
if ( !strcmp(argv[2], "3"))
ret = atob3(fp);
if ( !strcmp(argv[2], "4"))
ret = atob4(fp);
if (ret) {
fprintf(stderr, "atob1(): error\n");
exit(EXIT_FAILURE);
}
fclose(fp);
return 0;
}
default: atob
gcc -O -o atob atob.c
clean:
rm -f *.o atob
9000000000000000 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 01
100000000EE6B280 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 02
100000001DCD6500 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 03
100000002CB41780 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 04
100000003B9ACA00 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 05
9000000000000000 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 06
100000000EE6B280 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 07
100000001DCD6500 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 08
100000002CB41780 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 09
100000003B9ACA00 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 0A
9000000000000000 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 0B
100000000EE6B280 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 0C
100000001DCD6500 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 0D
100000002CB41780 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 0E
100000003B9ACA00 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 0F
9000000000000000 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 10
100000000EE6B280 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 11
100000001DCD6500 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 12
100000002CB41780 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 13
100000003B9ACA00 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 14
9000000000000000 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 15
100000000EE6B280 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 16
100000001DCD6500 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 03
100000002CB41780 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 04
100000003B9ACA00 A0369F1850e5 001C7E6ABAD1 0800 45 00 00 4E 00 00 40 00 40 11 FB 32 0A 00 00 6E 0A 00 00 02 04 04 00 89 00 3A 38 03 10 FD 01 10 00 01 00 00 00 00 00 00 20 46 45 45 4E 45 42 46 45 46 44 46 46 46 4A 45 42 43 4E 45 49 46 41 43 41 43 41 43 41 43 41 43 41 00 00 20 00 05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment