티스토리 뷰
1. 보내는 쪽
// Char, Hex간 변환
void Char2Hex(unsigned char ch, char* szHex)
{
static unsigned char saucHex[] = "0123456789ABCDEF";
szHex[0] = saucHex[ch >> 4];
szHex[1] = saucHex[ch&0xF];
szHex[2] = 0;
}
void __fastcall TMainFrm::GetSignImage(char *Sign)
{
Graphics::TBitmap * pOpenBmp = new Graphics::TBitmap(); // 이거 나중에 delete해야 함.
pOpenBmp->LoadFromFile("Small_ODT.bmp");
ZeroMemory(m_PixelBit, sizeof(m_PixelBit));
// 이미지 읽어서 버퍼에 담을때
int ImgW = pOpenBmp->Width;
int ImgH = pOpenBmp->Height;
int ArrCount = 0;
int BitCount = 0;
char BitPixel = 1;
AnsiString Str;
char Hex[3];
char DataBit = 0;
for(int H = 0; H < ImgH; H ++) {
for (int W = 0; W < ImgW; W ++) {
if(pOpenBmp->Canvas->Pixels[W][H] == clBlack) {
// DataBit |= BitPixel;
// 비트 저장을 <- 이방향으로 잘못 저장하고 있다 ㅡㅡ;
DataBit |= (0x80 >> (BitCount % 8));
// -> 이방향으로 저장해야 올바르게 값이 전달된다.
}
BitCount++;
if(BitCount % 8) {
BitPixel <<= 1;
}
else {
ZeroMemory(Hex, sizeof(Hex));
Char2Hex(DataBit, Hex);
memcpy(&Sign[ArrCount], Hex, 2);
Str.sprintf("[%x]->[%s]", DataBit, Hex);
// LogWrite(Str);
BitPixel = 1;
DataBit = 0;
ArrCount += 2;
}
}
}
delete pOpenBmp;
}
2. 받는쪽
//Function to convert a Hex string of length 2 to an unsigned char
bool Hex2Char(char const* szHex, unsigned char& rch)
{
if(*szHex >= '0' && *szHex <= '9')
rch = *szHex - '0';
else if(*szHex >= 'A' && *szHex <= 'F')
rch = *szHex - 55; //-'A' + 10
else
return false;
szHex++;
if(*szHex >= '0' && *szHex <= '9')
(rch <<= 4) += *szHex - '0';
else if(*szHex >= 'A' && *szHex <= 'F')
(rch <<= 4) += *szHex - 55; //-'A' + 10;
else
return false;
return true;
}
변환 후 적절히 활용
'프로그래밍 > C, C++' 카테고리의 다른 글
함수 포인터 (0) | 2019.06.28 |
---|---|
char, Hex 변환 (0) | 2019.06.28 |
통신문자 구분 표시 (0) | 2019.06.28 |
2차원 배열 동적 할당 (0) | 2019.06.28 |
리눅스 mutex 스레드 동기화 (0) | 2019.06.28 |
- Total
- Today
- Yesterday