일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- inspiron 15 7590
- 여객선
- 인스피론
- Thread
- MFC
- 환경변수
- SetThreadAffinityMask
- VisualStudio
- 영상처리
- Jetson Nano
- 가벼워
- 사용자매크로
- Today
- Total
MuTa
Std:bitset 활용 본문
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 |