운동하는 개발자/c++

MFC char* to Hex (부제 : DLL의 응답 값 변환하여 로그 찍기)

우용현 2025. 1. 19. 18:13
728x90

외부 DLL을 사용하면 문자열을 주로 char* 타입으로 전달한다.

이때 인코딩 타입을 알 수 없기에 Visual studio에서 사용되는 CP949로 바로 받으면 한글이 깨지는 현상이 발생하며
프로젝트 타입에 따라 모든 문자가 깨질 수 있다.

이때 우선 데이터를 정상적으로 수신하였는지 확인하기 위해서는 char*으로 넘어온 값을 hex로 변환해보는것이다.

#include <iostream>
#include <iomanip>
#include <sstream>
#include <cstring> // For CString

#ifdef _MSC_VER // Include only if compiling with Microsoft Visual C++
#include <atlstr.h>
#else
typedef std::string CString; // Define CString as std::string for other compilers
#endif

void convertToHex(const char* input, CString& output) {
std::ostringstream hexStream;

```
// Iterate through each character in the input array
for (size_t i = 0; input[i] != '\\0'; ++i) {
    hexStream << std::hex << std::uppercase << std::setfill('0') << std::setw(2)
              << static_cast<int>(static_cast<unsigned char>(input[i]));
}

// Assign the result to the CString
output = CString(hexStream.str().c_str());

```

}

int main() {
// Input char array
const char input[] = "Hello, World!";

```
// Output CString to hold the hexadecimal representation
CString hexOutput;

// Convert to hex
convertToHex(input, hexOutput);

// Print the result
std::cout << "Hexadecimal representation: " << hexOutput << std::endl;

return 0;

```

}

그냥 사내 레거시 호환성을 위해 CString을 쓰긴했는데 일반적으론 std::string로 처리하는것이 좋을것이다.

출력된 값을 로그로 찍으면 끝!! 

* 주의할점은 visual studio에선  Little Endian 방식으로 값이 보이게 될 것이다
보낸쪽이 서버거나 서버 데이터를 바로 by pass하는 식의 코드라면 Big Endian으로 전송하고 있을 수 있으니 주의한다.


 

728x90