я должен прочитать двоичный файл, поэтому я использую этот код:C# - BinaryReader и Little Endian
static void ReadBin()
{
var sectors = new List<Sector>();
using (var b = new BinaryReader(File.Open("C:\\LOG.BIN", FileMode.Open)))
{
const int offset = 4096;
const int required = 2;
int pos = 0;
var length = (int)b.BaseStream.Length;
while (pos < length)
{
for (int i = 1; i <= 640; i++)
{
pos = (offset*i)-2;
b.BaseStream.Seek(pos, SeekOrigin.Begin);
// Read the next 2 bytes.
byte[] by = b.ReadBytes(required);
sectors.Add(new Sector { Number = i, Position = pos, Type = Sector.SetTypeFromExadecimalString(ByteArrayToString(@by)) });
pos = pos + 2;
}
}
}
}
Как вы можете видеть ByteArrayToString взять массив байт и записать строку. Код ByteArrayToString является:
public static string ByteArrayToString(byte[] ba)
{
StringBuilder hex = new StringBuilder(ba.Length * 2);
foreach (byte b in ba)
hex.AppendFormat("{0:x2}", b);
return string.Format("0x{0}", hex.ToString().ToUpper());
}
машина, записать файл .bin записать его в LittleEndian. Итак, следуя этому потоку StackOverflow «Is .NET BinaryReader always little-endian, even on big-endian systems?« Я должен быть в «всем» LittleEndian формате (ReadBytes, а также файл, созданный машиной). Проблема в том, что функция ByteArrayToString() дает мне этот результат: 0xF0FF, который находится в BigEndian, а не в LittleEndian (infact, я полагаю, что я должен получить вместо 0xFFF0), потому что после этого мне нужно декодировать много данных, и я могу (я не имею никакого сравнения), я не хочу иметь проблему для декодирования .bin-файла, как я могу добиться обхода 0xFFF0?
Jom, спасибо, что ответ. К сожалению, что-то довольно странно ... Фрагмент, который я предоставляю, вставлен в большой проект, я должен прочитать подпись 640 секторов файла. Каждый сектор может быть «подписан» с 4 значениями. Ну, я могу иметь только один сектор, подписанный 0xFFF0 в формате Little Endian. Теперь остальные 639 секторов просто прекрасны, поэтому совершенно невозможно, чтобы я прочитал неверные данные (в противном случае другой сектор должен быть ошибочным). Инструмент, который генерирует файл, я уверен, что пишу в формате LittleEndian. Возможно, когда я скопирую его на свои машины (по USB), изменится формат endian? – pinguinone
@pinguinone: Это звучит очень маловероятно для меня. Вы должны посмотреть на файл с помощью редактора двоичных файлов, чтобы точно проверить, что там есть ... и не предполагайте, что что-то «совершенно невозможно», пока вы не разработали то, что на самом деле происходит. –