Elm:搜索字节数

问题描述 投票:1回答:1

我正在尝试在图像中找到一些exif数据。

所以首先我需要找到数字0x45786966('Exif'为unsignedInt32)并存储偏移量。

接下来的两个字节应为零,之后应存储的字节序为unsignedInt16(0x4d4d或0x4949)。

我可以使用Bytes模块将图像获取为elm/file。但是,如何搜索“ Exif”开头并解析这些Bytes中的字节序?

我看过loop-example中的loop,但并不完全了解。首先,它读取列表的长度(unsignedInt32),然后逐字节读取?如果我想读取unsignedInt32s而不是字节,怎么办?

如何设置偏移量以指示下一步应读取elm/bytes之类的功能?

elm
1个回答
0
投票

该示例开始时讨论的是结构尺寸为已知大小的数据。对于您而言,您想要做的是搜索,因此这是一个完全不同的问题。

问题是unsignedInt32并非真正用于处理搜索。如果可以保证所要查找的部分是按字节对齐的,则很有可能做到这一点,但是鉴于您所说的,这不是一种简单的方法,因为您不能逐个迭代-位。

您将不得不读入未对齐的值,然后在其中手动搜索所需数字的一部分。考虑到该方法的难度和效率低下,我建议在该用例中使用端口代替。

如果可以保证所搜索的内容将按字节对齐(或者更好的是,与数字的长度对齐),则可以一次解码一个字节,直到找到所需的内容为止。无法读取给定的偏移量,如果要读取到特定点,则需要读取并丢弃值。

为此,您需要建立一个循环,其中状态包含要查找的值的数量。每一步,您都要检查是否已完成(成功),是否具有下一个部分(继续)或是否有其他内容(将状态重置为从头开始搜索)。如果您找不到末尾,则说明您失败了。

© www.soinside.com 2019 - 2024. All rights reserved.