남스 님이 쓰신 글 :
: uart로 입력받은 hex 데이타를 어느 일부분에 대해서 문자열로 출력하고 싶습니다.
:
: UART 입력 데이터: 0x61 0x61 0x61 0x7E 0x 72 0x 73
: 메모장 출력 목표 : aaa 7E 72 73
:
: HEX표시는 아래 적용시 잘됩니다.
: strTemp=strTemp+IntToHex(ReqData->StaDebugString[i],2)+" ";
: MonitorForm->Memo1->SelText=strTemp;
: 하지만 0x61 0x61 0x61 를 메모장에 aaa로 표시하는 방법을 모르겠네요
: 도움 부탁드립니다.
그냥 만들면 될거 같은데요, clang 컴파일러로 테스트 했습니다.
참고로 저는 가능한 빌더 함수 안씁니다. 비쥬얼씨나 우분투에서 동일한 기능이 필요한 경우가 많아서요
//---------------------------------------------------------------------
#include <iostream>
std::string hexStr(unsigned char *data, int len)
{
constexpr char hexmap[] = {'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
std::string s(len * 3, ' ');
for (int i = 0; i < len; ++i) {
s[3 * i] = hexmap[(data[i] & 0xF0) >> 4];
s[3 * i + 1] = hexmap[data[i] & 0x0F];
}
return s;
}
//---------------------------------------------------------------------
std::string charStr(unsigned char *data, int len)
{
std::string s(len * 2, ' ');
for (int i = 0; i < len; ++i) {
char c = char(data[i]);
if ( c >= '!' && c <= '~')
s[2*i] = c;
else s[2*i] = '.';
}
return s;
}
//---------------------------------------------------------------------
std::string hexCharStr(unsigned char *data, int len)
{
return "HEX: " + hexStr(data, len) + " CHAR: " + charStr(data, len);
}
//---------------------------------------------------------------------
int main()
{
unsigned char d[] = { 0x61, 0x61, 0x61, 0x7e, 0x72, 0x73 };
std::cout << hexStr(d, 6) << std::endl;
std::cout << charStr(d, 6) << std::endl;
std::cout << hexCharStr(d, 6) << std::endl;
}
///// 출력결과 //////////
61 61 61 7e 72 73
a a a ~ r s
HEX: 61 61 61 7e 72 73 CHAR: a a a ~ r s
|