반응형
본 글에서는 배열에 담긴 바이트열 데이터를 16진수 형식으로 출력(Hex dump)하는 함수를 소개한다.
본 함수는 다양한 형태의 바이트열 데이터(예: 네트워크 패킷 데이터)에 담긴 내부 정보를 로그로 출력하여 디버깅하는 용도로 많이 활용된다.
본 함수를 실행하면, 다음 그림처럼 리눅스에서 xxd 명령을 통해 출력되는 형태와 유사하게 출력된다. 좌측에는 오프셋 값, 중앙에는 Hex dump 값, 우측에는 ASCII 코드 값이 출력된다.
다음은 Hex dump 출력 함수 전문이다.
#include <stdint.h>
#include <stdio.h>
/**
* 버퍼에 담긴 데이터에 대한 Hex dump 를 출력한다. 우측에 아스키 값도 함께 출력한다.
*
* @param[in] data 출력할 데이터가 담긴 배열
* @param[in] len 출력할 데이터의 길이
*/
void PrintHexDump(const uint8_t *data, const size_t len)
{
int i, j;
char c;
if(len == 0) {
return;
}
#define COLUMN_NUM 16
for (i = 0; i < len + ((len % COLUMN_NUM) ? (COLUMN_NUM - len % COLUMN_NUM) : 0); i++)
{
// 오프셋 출력
if ((i % COLUMN_NUM) == 0) {
printf("0x%06X: ", i);
}
// Hex dump 출력
if (i < len) {
printf("%02X ", *(data + i));
} else {
printf(" ");
}
// ASCII dump 출력
if ((i % COLUMN_NUM) == (COLUMN_NUM - 1)) {
for (j = i - (COLUMN_NUM - 1); j <= i; j++) {
c = *(data + j);
if (j >= len) {
putchar(' ');
} else if ((c >= ' ') && (c <= '~')) {
putchar(c & 0xff);
} else {
putchar('.');
}
}
putchar('\n');
}
}
putchar('\n');
}
'프로그래밍 > C 프로그래밍' 카테고리의 다른 글
Object Identifier asn.1 인코딩 방법 (0) | 2021.02.11 |
---|---|
C 프로그래밍 : 두 GPS 좌표간 목적지 방위각(bearing) 계산하기 (0) | 2020.04.29 |
C 프로그래밍 : 두 GPS 좌표간 거리(distance) 구하기 (3) | 2020.04.29 |
C 프로그래밍 : 네트워크 인터페이스 MAC 주소 문자열을 바이트열로 변환 (2) | 2020.02.13 |
C 프로그래밍 : MAC 주소 출력 매크로 - MAC 주소 출력문을 간단하게. (0) | 2020.02.12 |
C 프로그래밍 : 16진수 문자열을 바이트열로 변환하는 함수 (0) | 2020.02.08 |
나만의 간단한 로그출력 함수 만들기 (0) | 2019.07.28 |
TAILQ 사용법 (0) | 2016.12.11 |