【问题标题】:How to inverse an integer in C?如何在C中反转整数?
【发布时间】:2015-11-16 23:40:30
【问题描述】:

我正在尝试反转十六进制值。然而结果是错误的。

#include <stdio.h>
#include <stdint.h>
#include <netinet/in.h>

int main(void)
{
    uint32_t acc = 0xBBD1;

    printf("0x%X", htons(~acc));    // prints 0x2E44 
}

让我们手动进行反转:

0xBBD1 = 1011 1011 1101 0001
~1011 1011 1101 0001 =
 0100 0100 0010 1110
0100 0100 0010 1110 = 0x442E

这意味着,代码实际上应该打印 0x442E 而不是 0x2E44

我的代码有什么问题?

【问题讨论】:

  • 看看位字节序。
  • @cad 这是您所做的重要编辑。 IMO,它失去了一些 OP 的原始问题。
  • @chux 为什么会出现亏损?

标签: c hex inverse


【解决方案1】:

htons() 反转 x86 机器上的字节顺序。所以你的结果是正确的,只是交换了字节。看看字节序。

【讨论】:

    【解决方案2】:

    从技术上讲,没有。但是你为什么使用htons?它将 16 位数据的字节序更改为大字节序(即网络字节顺序)。首先是您的变量不是 16 位而是 32 位,所以 uint16_t acc = 0xBBD1 会更合适。其次,由于您在 little-endian 机器上,字节被交换,因此输出。

    【讨论】:

    • 谢谢,直到现在我才知道字节序,我修复了我的代码以考虑字节序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 2014-10-07
    • 2021-07-13
    • 2018-10-15
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    相关资源
    最近更新 更多