✅ 목표 (Goal)

hex2asc 함수를 만들어 보자.

asc2hex

conv_hex2asc(char* dst, char* src, int len);
// 길이가 더 커야함, 널포인터 체크
conv_asc2hex(char* dst, char* src, int len);

✅ 초기 컨셉

#include <stdio.h>
#include "util.h"

char asc1[32]="1234ABCD";
uint8_t bin1[32]= "";

conv_asc2bin(bin1, asc1, strlen(src1));
printf("ascii data is %s", asc1);  // 1234ABCD
printf("binary data is %d", bin1); // 12 34 AB CD = 18 52 171 205, 이 함수는 만들어야 할듯

char asc2[32]= {0, };
char bin2[32]= {1, 2, 0xAB, 0xFF};

conv_bin2asc(asc2, bin2, strlen(asc2));
printf("binary data is %d", bin2); // 1, 2, AB, FF
printf("ascii data is %s", asc2);  // 01 02 AB FF = 1 2 171 255

✅ 코딩해보자.

#define _CRT_SECURE_NO_WARNINGS

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

#include <stdint.h>
#include <stdbool.h>

#include "util.h"

int main() {

	// ascii  data= 1234ABFF = 31 32 33 34 41 42 46 46
	// binary data= 12, 34, AB, FF = 18, 52, 171, 255
	char asc_data1[32] = "1234ABFF";
	uint8_t bin_data1[32] = { 0, };// bin 데이터의 사이즈는 asc 사이즈의 절반이면 된다.
  // 예를 들어 asc 1234ABFF의 사이즈는 8이므로 8/2=4와 같이 계산하면 되는데.. 계산하기 번거롭다면 asc 길이 그대로 넣어도 된다.
	uint8_t bin_len1 = 0; // 바뀐 bin 데이터의 길이가 나온다. 크게 필요하진 않은데 con_bin2asc와의 통일성을 위해 만들었다.
	bin_len1= conv_asc2bin(bin_data1, asc_data1, (uint8_t)(strlen(asc_data1)));

	printf("asc data is \\"%s\\"(%d)\\r\\n", asc_data1, (int)(strlen(asc_data1)));
	printf("bin data is "); print_bin_data(bin_data1, bin_len1, RADIX_HEX);
	printf("bin data is "); print_bin_data(bin_data1, bin_len1, RADIX_DEC);
	printf("------------------------------\\r\\n");

	// binary data= 1, 2, 0xAB, 0xFF
	// ascii  data= 0102ABFF or 01 02 AB FF
	uint8_t bin_data2[4] = {1, 2, 0xAB, 0xFF}; 
	#define ASC_DATA2_LEN (4*3+1)  // AB_ 3글자 x 배열 요소 갯수 + 1 (=널문자)
	printf("bin data is "); print_bin_data(bin_data2, 4, RADIX_HEX); // 01 02 AB FF
	printf("bin data is "); print_bin_data(bin_data2, 4, RADIX_DEC); // 1 2 171 255

	char asc_data2[ASC_DATA2_LEN] = {0, };
	uint8_t converted_asc_len = 0;
	converted_asc_len = conv_bin2asc(asc_data2, bin_data2, 4, false);  // false -> 0102ABFF
	printf("asc data is %s(%d)\\r\\n", asc_data2, converted_asc_len);

	char asc_data3[20] = {0, };
	converted_asc_len = conv_bin2asc(asc_data3, bin_data2, 4, true); // true -> 01 02 AB FF
	printf("asc data is %s(%d)", asc_data3, converted_asc_len);

	return 0;
}

Untitled