두 가지 제안 : 대신 논리 연산을 사용하여, 당신은 256 개 문자 : 당신이 정적이 조회를 초기화 싶지 않는 경우
char lookUpTable[256] = {0x00, 0x02, 0x01 ...};
의 룩업 테이블을 사용할 수 있습니다, 당신은 쓸 수 있습니다 논리 연산을 사용하여 초기화하는 함수.
바이트 b를 바꾸려면 lookUpTable [b]을 쓰거나 함수로 래핑하십시오. 당신은 다음과 같이 이것을 사용
void SwapBits(char* data, size_t len)
{
For (; len > 0; len--)
{
*data = lookUpTable[*data];
data++;
}
}
:이 swapMe의 "내용"대체
AnyType swapMe = whatever;
SwapBits((char*)(&swapMe), sizeof(AnyType));
주
는 모든 유형의 교환에 관해서는, 당신은 같은 일을 수행하는 함수를 작성.
한 가지 더, 올바른 시프트 동작은 아키텍처에 따라 다르며, 일부 아키텍처는 오른쪽 시프트로 확장됩니다.
SwappedByte = ((Byte >> 1)&0x55) | ((Byte << 1)&0xaa)
이렇게하면 부호 확장 인공물을 제거 할 수 있습니다.
그래서 01101100은 10011100이 될까요? –
예, 정확히 @ LoganMurphy – Quaker
@LoganMurphy "두 비트마다 서로 바꿔 치기"라고 나는 생각한다. –