输入为 0x1234,我希望输出为 0x2143,但我得到 0x4321
#include <stdio.h>
#define SWAP(num) (((num) & 0x0F) << 4) | (((num) & 0xF0) >> 4)
int main() {
short input = 0x1234;
short output = SWAP(input);
print("Input: 0x%04X\n", input);
print("Output: 0x%04X\n", output);
return 0;
}
您得到的不是 0x4321,而是 0x0043。您忘记了高字节,并且写了
print
而不是 printf
。下面的代码可以满足您的要求。
#include <stdio.h>
#define SWAP(num) (((num) & 0x0F00) << 4) | (((num) & 0xF000) >> 4) | \
(((num) & 0x0F) << 4) | (((num) & 0xF0) >> 4)
int main() {
short input = 0x1234;
short output = SWAP(input);
printf("Input: 0x%04X\n", input);
printf("Output: 0x%04X\n", output);
return 0;
}
这个宏
#define SWAP(num) (((num) & 0x0F) << 4) | (((num) & 0xF0) >> 4)
仅交换较低有效字节的两个半字节。
所以结果会是
0x43
如果你想得到输出
0x2143
你需要写
#include <stdio.h>
#define SWAP(num) ( ( ( num ) & 0xF000u ) >> 4 | ( ( num ) & 0x0F00u ) << 4 |\
( ( num ) & 0xF0u ) >> 4 | ( ( num ) & 0x0Fu ) << 4 )
int main( void )
{
short input = 0x1234;
short output = SWAP( input );
printf( "%#x\n", output );
}