C 프로그래밍 : 16진수 문자열을 바이트열로 변환하는 함수

반응형

본 글에서는 16진수 문자열을 바이트열로 변환하는 함수를 소개한다.

 

예를 들어, "FE303321" 과 같이 16진수를 표현하는 8바이트 길이의 문자열을 array[4] = { 0xFE, 0x30, 0x33, 0x21 } 과 같은 4바이트 배열로 변환하는 함수이다.

 

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


/**
 * 16진수 문자열을 바이트열로 변환한다.
 * @param[in] hex_str  16진수 문자열 (예: fe80000000000000024954fffe454b01)
 * @param[out] array   변환된 바이트열이 저장될 버퍼
 * @return 변환된 바이트열의 길이
 */ 
size_t ConvertHexStrToArray(const char *hex_str, uint8_t *array)
{
  size_t i, array_size = strlen(hex_str) / 2;
  char t[3];

  for(i = 0; i < array_size; i++) {
    memcpy(t, (str + i*2), 2);
    t[2] = '\0';
    *(array + i) = (uint8_t)strtoul(t, NULL, 16);
  }
  return array_size;
}


/**
 * ConvertHexStrToArray() 함수 테스트 어플리케이션 메인 함수
 */
int main(int argc, char *argv[])
{
  char *hex_str = "FE803321";
  uint8_t array[4];

  size_t array_size = ConvertHexStrToArray(hex_str, array);
  printf("Converted : 0x");
  for (size_t i = 0; i < array_size; i++) {
    printf("%02X", array[i]);
  }
  printf("\n");

  return 0;
}

 

댓글

Designed by JB FACTORY