文件信息:前4个字节包含文件中的记录数|接下来的4个字节包含第一个记录的长度。再次记录后,4个字节包含第二个记录的长度。整个文件是这样的。所以我必须读取输入文件并跳过前4个字节。之后,我需要读取4个字节,这将给出我即将到来的记录的长度,并在字符串中写出记录并重复该过程。
我没有得到我应该得到的东西。例如: 对于7F CB 00 00,我应该得到32715(我不需要,需要跳过)。接下来是4个字节 00 D3 00 00 00我应该得到211,但我没有得到。
任何帮助都将不胜感激。
private void button1_Click(object sender, EventArgs e)
{
FileStream readStream;
readStream = new FileStream(singlefilebox.Text,FileMode.Open,FileAccess.Read);
BinaryReader readBinary = new BinaryReader(readStream);
byte inbyte;
inbyte = readBinary.ReadByte();
string outbyte;
while (readBinary.BaseStream.Position < readBinary.BaseStream.Length)
{
inbyte = readBinary.ReadByte();
outbyte = Convert.ToString(inbyte);
}
答案 0 :(得分:0)
第一个问题是您如何进行输出。当您生成outbyte时,它将被转换为十进制表示法。例如,CB转换为203.
将生成outbyte的行更改为以下内容:
outbyte = Convert.ToString(String.Format("{0:X}", inbyte));
这将打印十六进制数字的字符串表示形式。
有关字符串格式的更多详细信息,请参阅此答案。 String.Format for Hex
更大的问题是你需要以正确的方式组合字节。您需要读取每个字节,将其移位8位,然后添加下一个字节。
string fileName = @"..\..\TestInput.hex";
FileStream readStream;
readStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
BinaryReader readBinary = new BinaryReader(readStream);
byte inbyte;
string outbyte;
int value;
inbyte = readBinary.ReadByte(); // read in the value: 7F in hex , 127 in decimal
value = inbyte << 8; // shift the value 8 bits to the left: 7F 00 in hex, 32512 in decimal
inbyte = readBinary.ReadByte(); // read in the next value: CB in hex, 203 in decimal
value += inbyte; // add the second byte to the first: 7F CB in hex, 32715 in decimal
Console.WriteLine(value); // writes 32715 to the console