Notice
Recent Posts
Recent Comments
Link
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

MuTa

Std:bitset 활용 본문

MFC-C++

Std:bitset 활용

MuTa 2016. 3. 30. 09:55

232 or 485 통신 으로 bit 제어할 경우가 있다.

마스크 연산 필요 없이 비트 제어 하는 클래스가 있다.

 

0x00000009는

32비트 이고 숫자 한글자는 4개비트로 대응된다.

비트로 풀어서 쓰면

0000 0000 0000 0000 0000 0000 0000 1001  과 같다

0x00000011

0000 0000 0000 0000 0000 0000 0001 0001  로 변경하고 할 때

특정 bit는 끄거나 키고, 특정 bit는 유지해야만 하는 경우

Bit Mask 연산을 한다.  http://jrj8819.blogspot.kr/2012/08/bit-mask.html

 

하지만 직관적이지 않고 bit shift 나 And 연산할 때 자칫 혼동의 우려가 있다.

 

 

어떤 인터페이스가 될지 모르지만

메시지 수신은 String 으로 받게된다.

 

다음과 같이 long 변수로 변환하고

long lval = wcstol(strVal, NULL, 16);



 

#include <bitset>

 

std::bitset<32> bs;  //uLong 까지 대응 << 

bs = lval;

 

for (int i = 0; i < 변경할 bit 수; i++)

{

int iCh =변경하고 싶은 bit;

if (iCh < 0) return FALSE;

if (bOn) bs.set(iCh);    // 비트를 1로 변경

else     bs.reset(iCh);  // 비트를 0으로 변경

}

 

Lval = (long)bs.to_ulong();   // 값 밀어 넣기

 

자릿수를 요하는 경우

CString strHex;

strHex.Format(_T("%X"), lval);

int nCnt = 8 - strHex.GetLength();

for (int i = 0; i<nCnt; i++)

strHex.Insert(0, _T("0"));

 

이런 방법으로 8칸을 채웠다.


CString strCmd, strRead;

strCmd.Format(_T("0x%s\r"), strHex);



http://en.cppreference.com/w/cpp/utility/bitset

레퍼런스

std::bitset

'MFC-C++' 카테고리의 다른 글

[MFC] 버튼 색상 변경  (0) 2016.05.10
폴더내 파일 리스트 가져오기  (0) 2016.03.30
Std::vector Sort  (0) 2016.03.30
SetThreadAffinityMask()  (0) 2014.06.05
MFC 구조  (0) 2014.05.13