Я новичок в Visual Studio и C#, но моя проблема кажется почти элементарной, но я не могу понять это. У меня есть двоичный файл, который я читаю, и я пытаюсь обработать его более или менее байт за раз. Проблема в том, что когда я получаю несколько байтов в моем состоянии «если», кажется, что значение TRUE долгое время должно быть FALSE.Если условие не оценивается как ожидалось
Вот быстрый jist входного двоичного кода, поэтому приведенный ниже код имеет смысл.
байт [0-3]: Преамбула
байт [4]: тип сообщения
байт [5-7]: длина сообщения
байт [8-11]: тест ID
и фрагмент кода
file = openFileDialog1.FileName;
int byteLoc = 0;
try
{
var bytes = File.ReadAllBytes(file);
//loop through each byte from the input file
foreach (var singleByte in bytes)
{
//Preamble - 4 bytes
if (byteLoc < 4)
{
preamble += Convert.ToString(singleByte);
preamble += " ";
}
//Message Type - 1 byte
else if (byteLoc == 4)
{
msgType += Convert.ToString(singleByte);
}
//Message Length - 3 bytes
else if ((byteLoc > 4) || (byteLoc <= 7))
{
msgLen += Convert.ToString(singleByte);
Console.WriteLine("Len:" + byteLoc); //for debug
}
//Test ID - 4 bytes
else if ((byteLoc >= 8) || (byteLoc <= 11))
{
testID += Convert.ToString(singleByte);
Console.WriteLine("ID:" + byteLoc); //for debug
}
byteLoc++;
}
}
Я распечатал преамбулу и MsgType и они появляются, как ожидалось. Однако проблема заключается в том, что когда я перехожу к условию «if» для msgLen (который должен быть байтами 5-7), он ВСЕГДА оценивает значение TRUE. Я вижу сообщение «Len: byteLoc», начинающееся с 5 и идущее до конца файла. Что я делаю неправильно здесь, когда byteLoc достигает 8, а не переходит в следующее условие «если»?
Вы должны использовать '&&' вместо '||'. Все больше 4 или меньше 7. – juharr
Подсказка: если 'byteLoc == 47', что' bytLoc> 4' оценивает? – CDspace
Каждое целое число существует * либо * больше четырех, * или * меньше или равно семи. 5, 6 и 7 - оба. –