我怎么知道案件是否属实?

时间:2014-02-01 23:02:40

标签: c binary

假设我们得到一个字节的二进制数据,你怎么知道这些数据代表什么?

你真的不知道数据代表什么是真的,因为你需要知道二进制数据的一个字节是否用基数2表示,如果它是无符号的,有符号的等等。

或者你可以知道它代表什么,因为二进制是基础2?

4 个答案:

答案 0 :(得分:1)

Base-2和binary指的是同一个东西。通常,您需要至少知道字节是有符号还是无符号(在C中)。至于数据代表什么 - 好吧,“它取决于”。是否要将其解释为单个字节,字符(或不是)等。对于多字节数据,通常还需要考虑字节顺序(将字节排序为更大的单词)。

答案 1 :(得分:1)

某些文件格式以magic number开头,例如所有PNG文件都以89 50 4E 47 0D 0A 1A 0A开头。也就是说,如果你有一个没有任何幻数的通用二进制文件,你可以猜测他的内容。

您可以尝试使用十六进制编辑器打开它,但没有自动方式来理解数据代表什么。

答案 2 :(得分:1)

我很遗憾地告诉我,一个字节的数据与它假定的表示无关。 你声明,因为它是一个字节,它是一个二进制表示。这纯粹是假设。 这取决于存储数据的人的意图。 它可能代表任何东西。正如@nos告诉你的那样,它实际上取决于setter用于存储它的约定。

你可能有2个数字互补,7位有符号字节,8位无符号,八进制表示(或部分表示)或掩码(字节内的每组字节可能描述完全不同比另一个)。它也可以是特殊编码的表示。等等。

这真的是无限的。

为了正确解释它,您需要了解基本约定(规范)。 @ fede1024告诉你有关使用特殊字符的文件,以便你可以仔细检查约定。

还有一件事......请记住,即使二进制数据也可以按自然顺序或相反的顺序存储:即字节序。因此,当您检查至少2个字节的数字存储时,您必须知道最重要的字节是先存储还是秒存储在内存中。如果您误解了这一点,您将无法理解基础数据。字节顺序是给定处理器的常量。

答案 3 :(得分:0)

你知道它是基数2,因为它是一个字节的二进制数据,如你所说。要查看它是否为真,在C中除了0之外的所有内容都是真的。如果它为0,那么它就是假的。