티스토리 뷰

반응형

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