【问题标题】:How to swap the hexadecimal numbers in c language?如何在c语言中交换十六进制数字?
【发布时间】:2011-06-09 13:05:07
【问题描述】:

如何在c语言中交换以下两个十六进制数?例如:

输入:0xabcd
输出:0xcdab

【问题讨论】:

  • ...已从已回答的问题中删除。
  • 另外:您的帖子不需要签名。
  • 我回复了另一个问题;如果 OP 不再需要它,它应该被删除,因为那里有答案。不幸的是,在注意到这一点之前,我已经投票决定关闭。
  • 究竟是如何重复的? 没有像这个问题!
  • @paxdiablo:@venkat 将标记为引用的问题编辑为与此问题完全相同,因此在关闭时,这完全是一个骗局。 @Wooble 之后才恢复它。

标签: c hex


【解决方案1】:

您可以使用以下方式:

#include <stdio.h>
int main (void) {
    unsigned int from = 0xabcd;
    unsigned int to = ((from & 0xff) << 8) | (from >> 8);
    printf ("%04x\n", to);
    return 0;
}

这会交换两个字节,输出cdab

【讨论】:

    【解决方案2】:

    什么平台? Windows 提供各种尺寸的_byte_swap。否则,您可以将其移位。

    【讨论】:

      【解决方案3】:

      我的一位教授向我展示了这种用于交换整数的小技巧,我一直觉得它很优雅:

      int x = 5;
      int y = 7;
      x = x ^ y;
      y = x ^ y;
      x = x ^ y; // x = 7, y = 5
      

      【讨论】:

      • 我很高兴被否决,但至少我想知道为什么。
      • 我没有投反对票,但是如果您查看问题中的示例,它实际上是在询问如何交换字节顺序而不是如何交换两个变量。此外,虽然 xor 技巧很聪明,但它通常比使用临时变量更慢且更容易出错。
      • 我会把它归咎于一个措辞不当的问题。 :) 感谢@interjay 的反馈
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-16
      • 2021-11-05
      • 2014-03-24
      • 2017-08-12
      • 2021-11-17
      • 2014-03-19
      相关资源
      最近更新 更多