【问题标题】:Decode application/octet-stream解码应用程序/八位字节流
【发布时间】:2013-10-16 17:19:08
【问题描述】:

我对来自互联网的数据有疑问。我有一个来自 Internet 的包,其内容类型为:application/octet-stream。

我的问题是如何将其解码为可读值(例如 1,4.321,-2.6013 等)?或者是否有任何应用程序可以做到这一点?

例如:

3ecccccd 是 0.400 (http://gregstoll.dyndns.org/~gregstoll/floattohex/) 有些是实数。 07d0 是 2.000

【问题讨论】:

  • 欢迎来到 Stack Overflow。如果您想提供与您的问题相关的更多信息,请edit它。注意编辑问题而不是答案。 (编辑答案是允许的,但应该是为了改进答案,而不是为了澄清问题。)

标签: android c windows delphi web


【解决方案1】:

HTTP 的 Content-Encoding 标头仅适用于数据在 HTTP 消息本身内部的编码方式,而不适用于数据本身在 HTTP 之外的编码方式。您的示例中没有 Content-Encoding 标头,因此 HTTP 不会以任何方式对数据进行编码,而是按原样为您提供原始数据。

当HTTP的Content-Type标头为application/octet-stream时,表示数据(根据Content-Encoding解码后,如果有的话)是原始的8bit数据,发送方不知道数据的实际类型是什么.如果没有更有意义的Content-Type 来告诉您数据实际代表什么,您唯一能做的就是分析原始数据并对它可能是什么做出有根据的猜测,除非您通过其他方式知道数据应该是什么.

通常,二进制数据格式在数据前面有一个标头/签名来标识数据是什么,因此您可以从它开始。

在您能够识别数据类型之前,您无法知道哪些字节代表什么类型的值,多字节值使用什么字节序等。总之,您需要有关正在下载的数据的更多信息,以便知道如何处理它。

【讨论】:

  • 我明白。你说的对。在做了一些蛮力之后,我知道有些值是 1,2 和 4 位长。但是,我可能会说,识别数据类型有点……难。
  • String guessedType = URLConnection.guessContentTypeFromName(url); 也可以工作
【解决方案2】:

该内容类型不表示任何编码。这意味着数据代表一个(8位)字节流。它们的编码方式是完全不同的事情。要发现编码,您可以查看其他标头(例如 Content-Encoding),否则编码可能是隐式的,在这种情况下您需要查阅文档。然后据此选择合适的解码策略。

【讨论】:

  • 所以我说“将其解码为可读值”,因此将原始数据转换为人类可读值,正如我在括号中所写的那样。如果你读过这篇文章,它会说“content-type:application/octet-stream”。所以我几乎知道你问了什么,但是这些值以 1-4 位长的形式出现:(这是我卡住的地方。谢谢。
  • 你问怎么做的是decode。您拥有的有关数据的唯一信息是类型。 (如果我没有阅读您的帖子,我不会知道这一点,所以请不要对我进行虚假指控。)我的回答是 type 不是决定如何解码。你需要不同的信息,一旦你有了这些信息,它就会推动你的下一步行动。
  • 不,不,不。首先,我不是在指责。我是来寻求帮助的,不是为了做傻事。然后,我说“将其解码为可读值”,而不是普通解码。无论哪种方式,无论如何,您对起点有什么想法吗?现在,我正在使用十六进制编辑器并手动执行操作。一个带有我正在尝试做的图片的帖子,你认为它会有帮助吗?谢谢
  • 阅读写给您的内容...您无法在不知道使用了哪个 ENCODING 的情况下将其解码为可读值。您所拥有的只是数据的类型 - 而不是它是如何编码的。您需要查看 Content-Encoding 标头(如果有 - 如果没有,您需要询问数据的发送者如何对其进行解码)。您没有足够的来自 Content-Type 的信息来确定如何对其进行解码...
  • 您没有足够的信息来解码它。你不知道编码格式。你说 3ECCCCCD 是 0.4(假设 IEEE 单精度浮点) - 我说它是 Little-Endian 32 位整数格式的 1053609165。或 Big-Endian 32 位整数格式的 3452750910。所以你看 - 在不知道编码格式的情况下,你真的无法解码它,因为所有这些值都是你提到的 4 个字节的完全有效的解码。您需要知道用于解码的 ENCODING - 简单明了...
猜你喜欢
  • 2011-06-15
  • 2011-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-21
  • 2017-04-02
  • 1970-01-01
  • 2022-10-11
相关资源
最近更新 更多