为什么我不能在二进制文件中找到int值

Mat*_*att 4 c linux hexdump elf

我在64位linux机器上编译了以下程序:

#include <stdio.h>

main()
{
    int a = 12345;

    if (a == 12346)
        printf ("YES\n");

    return;
}
Run Code Online (Sandbox Code Playgroud)

如果我使用hexdump输出二进制文件,我可以找到12346(十六进制为303a),但不能找到12345值(0x3039).这是为什么?

(小端或大端应该在找到该值时没有区别)

Ry-*_*Ry- 6

这是hexdump我在平原输出中的值; 看看粗体区域.

0000500 39fc 0030 8100 fc7d 303a 0000 0a75 a4bf

如果你期望看到3039一个群体,这将解释混乱.实际字节是:

fc 39 30 00 00 81 7d fc 3a 30 00 00 75 0a bf a4

如果您不希望hexdump执行其"有用"的默认输出,它将输入重新解释为一系列小端双字节字,您可以花一小时计算如何使用其格式字符串或只选择xxd而不是.