转换字节序的C代码?

时间:2011-03-31 06:02:26

标签: c endianness

我想转换无符号的32位整数,如下所示:


Input = 0xdeadbeef

Output = 0xfeebdaed

谢谢。

2 个答案:

答案 0 :(得分:4)

字节序转换。输出应为0xEFBEADDE,而不是0xFEEBDAED。 (仅交换字节,每个字节为2个十六进制数字。)

要在小端和大端之间进行转换,请查看_byteswap_ulong

答案 1 :(得分:1)

半字节逆转的一般过程是:

  

((i& 0xF0000000)>> 28)| ((i&   0xF000000)>> 20)| ((i& 0xF00000)>> 12)   | ..... | ((i& 0xF)<< 28)

掩盖,转移,或(我希望我的数字正确):

  1. 通过ANDing(&)用面具提取您感兴趣的数字部分。
  2. 使用>>将其移至目标位置和<<操作。
  3. 通过ORing(|)组合构建新值。
  4. 如果要重新排序字节,则将使用0xFF进行掩码。正如每个人都说这可能是你想要的,如果你正在寻找一个罐装版本,请按照其他人的建议。