들어오는 32 비트 버퍼를 처리하는 함수를 작성하여 변경된 데이터를 해당 저장된 32 비트 버퍼와 비교할 때이를 나타냅니다. 변경 비트의 위치는 변경이 0-> 1인지 1-> 0인지 여부와 함께 처리되어야하는 번호 (즉, 8의 값은 비트 3을 의미 함)를 나타냅니다. 여기에 현재의 구현입니다, 제발 그것을 개선하는 데 도움주세요! 이것은 실제 코드가 아니며 컨텍스트에 중립적으로 단순화되었습니다.이 C++ 비트 버퍼 처리 코드를 향상시키는 데 도움이됩니다.
uint32_t temp = oldBuffer^newBuffer;
uint32_t number = 0;
while (temp != 0)
{
if (temp & 0x1)
{
uint32_t bitValue = 0;
if ((newBuffer& (1 << number)) != 0) bitValue = 1;
processNumber(number, bitValue);
}
number++;
temp = temp >> 1;
}
oldBuffer = newBuffer;
지금은 제대로 작동하지만 비트 1을 확인하고 전체 내용을 확인하여 각 비트를 확인해야한다는 점이 마음에 들지 않습니다. 알아 내기 힘들지 않을 것 같은 1 비트 세트 만 보장된다면, 그렇진 않습니다.
편집 : Neil에게, 나는 버퍼를 통해 모든 방법으로 이동하고 비트를 하나씩 확인하는 대신 일정 시간에 XOR 이후의 비트 위치를 얻는 방법을 찾고 싶습니다.
은 어떤 의미에서 개선? –
표준 라이브러리를 사용할 수 있습니까? – xtofl