我想获取输入,例如0xaabbccdd并将其转换为DDCCBBAA或转换输入oxf0f0 t0 F0F0。我编写的下一个代码设法将f0f0f0转换为0f0f0f。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int number;
scanf("%x",&number);
if(number > 1){
number = (~number);
printf("Number hex is %x decimal is (%d) ",number,number);
}
return 0;
}
答案 0 :(得分:0)
您是否想知道在实际应用中执行此操作的最佳方式,或者您是否只想弄清楚它是如何工作的,这并不是很明显。
假设前者:
如果这是针对网络/主机字节顺序的,请将htonl
和ntohl
用于32位数量,将htons
和ntohs
用于短路。< / p>
如果这不是网络/主机字节顺序,我们可以窃取^ Wreuse他们的代码。当需要交换时,它们使用__bswap32
和__bswap16
函数。这些通过bswap_32
和bswap_16
界面提供 - 只需#include <byteswap.h>
假设您对它的工作原理感兴趣,请查看Linux机器上的/usr/include/bits/byteswap.h
,您将看到优化的byteswapping例程。这是一个:
#define __bswap_constant_32(x) \
((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \
(((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24))
这是显而易见的方法。
还有一个巧妙的技巧,你可以用XOR来交换各组的位。请参阅:http://graphics.stanford.edu/~seander/bithacks.html#SwappingBitsXOR