我被赋予了以下编程任务(编辑以模糊任务细节):
可以查询原始(二进制)文件(阶段 II 实施所需)以检测 pod 是否存在。格式取决于文件的来源——FormatX 与 FormatY。使用 16 位字长,以下位掩码可用于确定文件中是否存在 pod:
Word # Mask Value Indicates
1 0xFF00 0x8700 Little Endian (Format X)
1 0x00FF 0x0087 Big Endian (Format Y)
13 0x0200 0x0200 right pod installed (Format X)
13 0x0002 0x0002 right pod installed (Format Y)
13 0x0100 0x0100 left pod installed (Format X)
13 0x0001 0x0001 left pod installed (Format Y)
到目前为止我是如何解决这个问题的:我在本地文件系统上有文件,所以我使用 System.IO.File.OpenRead 将它放入 Stream 对象。我想一次读取 16 位/2 字节的流。对于这种大小的第一个“单词”,我尝试应用位掩码来检测我正在处理的格式。然后我跳到第 13 个“单词”并根据该格式检测右/左 pod。
这是我编写的一些初步代码,但它不起作用。我知道我正在阅读的文件应该是 Y 格式,但我的检查不起作用。
int chunksRead = 0;
int readByte;
while ((readByte = stream.ReadByte()) >= 0)
{
chunksRead++;
if (chunksRead == 1)
{
// Get format
bool isFormatY = (readByte & 0x00FF) == 0x0087;
}
else if (chunksRead == 13)
{
// Check pods
}
else if (chunksRead > 13)
{
break;
}
}
谁能看到我的实现有什么问题?我应该如何解释 2 字节字长?
根据@Daniel Hilgarth 的回复进行编辑
感谢 Daniel 的快速回复。我进行了更改,现在它正在为第一个单词工作:
byte[] rawBytes = new byte[stream.Length];
stream.Read(rawBytes, 0, rawBytes.Length);
ushort formatWord = Convert.ToUInt16(rawBytes[0] << 8 | rawBytes[1]);
bool formatCheck = (formatWord & 0x00FF) == 0x0087;
我只需要找到一个示例文件,该文件应该为安装的右/左 pod 返回一个肯定的结果来完成此任务。