다음과 같이 16 진수의 바이트를 반대로하고 싶습니다.16 진수의 바이트를 반대로하는 방법은 무엇입니까?
0x08090a0b
은 0x0b0a0908
으로 변환해야합니다.
이 매크로를 사용했습니다.
#define REV(X) ((X << 24) | (((X>>16)<<24)>>16) | (((X<<16)>>24)<<16) | (X>>24))
다음과 같이 16 진수의 바이트를 반대로하고 싶습니다.16 진수의 바이트를 반대로하는 방법은 무엇입니까?
0x08090a0b
은 0x0b0a0908
으로 변환해야합니다.
이 매크로를 사용했습니다.
#define REV(X) ((X << 24) | (((X>>16)<<24)>>16) | (((X<<16)>>24)<<16) | (X>>24))
int main(void)
{
// your code goes here
unsigned int X = 0x08090a0b;
printf("%8x", ((X << 24) | (((X>>16)<<24)>>16) | (((X<<16)>>24)<<16) | (X>>24)));
return 0;
}
귀하의 출력은 올바른 것입니다. 처음에는 0이 표시되지 않는다고 말하는거야? 귀하의 경우
09 = 9 x0b0a0908 = b0a0908
그것은 깨끗하고 당신이 마스크로 이동 결합 할 경우, 따라하기 쉬운 : I 별도로 전체 표현 및 해당 구성 요소를 모두 보여 아래. 마스크에 선행 제로가 필요하지 않음을 유의하십시오. 명확성/정렬을 위해 거기에 넣습니다. 그리고 첫 번째와 마지막 학기에는 마스크가 필요하지 않습니다. "원치 않는"비트가 모두 표현식에서 벗어나기 때문입니다. 한 번에
#define REV(X) ((X << 24) | ((X & 0xff00) << 8) | ((X >> 8) & 0xff00) | (X >> 24))
1 바이트 :
#define R1(X) ((X & 0x000000ff) << 24)
#define R2(X) ((X & 0x0000ff00) << 8)
#define R3(X) ((X & 0x00ff0000) >> 8)
#define R4(X) ((X & 0xff000000) >> 24)
이 수를 제대로 출력이 앞에 0이 인쇄되어 있는지 확인합니다
printf("%08x", REV(x));
을 사용합니다. 이 작업을 올바르게 수행하려면 입력이 32 비트 부호없는 정수인지 확인해야합니다.
고맙습니다. 알았다. –
아주 쉬운 설명. 오프 모자! – Gomu
그래서 당신이 원하는 것을 얻을 수 있었습니까? – const
이 문제는 정수를 뒤집는 것과 정말로 다른가요? –
무엇이 문제입니까? 이 방법은'sizeof (X)> 4 '또는 X가 서명 된 경우에만 문제를 볼 수 있습니다. –