我想获得C中所有类型变量的二进制表示:int
,unsigned int
,long
,unsigned long
,short
,{ {1}},unsigned short
,float
和double
。
当我获得变量的大小(char
)并将其转换为二进制系统时,这是最好的解决方案吗?
如何快速轻松地进行这样的转换?
答案 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()
函数对上述函数使用两个输入:
main()
,2882400235
或0xABCDEFEB
0b10101011110011011110111111101011
,42.0
或0x42280000
。要检查整数,您可以使用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"