在C中获取变量的二进制表示

时间:2017-06-13 19:40:44

标签: c

我想获得C中所有类型变量的二进制表示:intunsigned intlongunsigned longshort,{ {1}},unsigned shortfloatdouble

当我获得变量的大小(char)并将其转换为二进制系统时,这是最好的解决方案吗?

如何快速轻松地进行这样的转换?

1 个答案:

答案 0 :(得分:0)

获取任何类型的二进制表示形式:

我编写了以下代码,提供了两个功能,可以满足您的要求。第一个函数getBinaryHostMemoryRepresentation()将填充您提供的buffer以及它们如何保存在主机内存中的位:可能是小端,大端或其他(不太可能)。例如,整数0xABCD保存在little-endian上0xCDAB

getBinaryRepresentation()函数将检查您正在运行的计算机,并将使用您期望的人类可读的位代表填充buffer,这样您将得到{{1} }。要检查程序运行的是什么类型的计算机,请使用0xABCD函数,查看其工作原理here on SO

这两个函数都需要以下参数:isLittleEndian()。前两个是缓冲区和缓冲区的大小。最后两个是要转换的变量(它是一个void指针,它可以是任何数据)和变量的大小(以字节为单位),可以通过char * const buffer, size_t bufSize, const void * var, size_t varSize获得。此外,函数检查缓冲区是否足够大,如果不是,它们返回空指针。如果它足够大,它们会将指针返回到您提供的缓冲区。可以在sizeof()函数中观察到该用法。

main()函数对上述函数使用两个输入:

  1. 整数:main()28824002350xABCDEFEB
  2. 浮动:0b1010101111001101111011111110101142.00x42280000
  3. 要检查整数,您可以使用Windows计算器来检查您可以使用的浮动this site online

    计划的输出:

    0b01000010001010000000000000000000

    用C标记问题时C中的代码:

    integer 2882400235:
    Host memory binary representation:    "11101011111011111100110110101011"
    Human readable binary representation: "10101011110011011110111111101011"
    
    single floating point 42.0:
    Host memory binary representation:    "00000000000000000010100001000010"
    Human readable binary representation: "01000010001010000000000000000000"