Как записать ints в текстовый файл с нижними битами на правой стороне (Bigendian)
По умолчанию класс BinaryWriter записывает значения int с нижними битами слева (например, (int)6 становится 06 00 00 00, когда результирующий файл просматривается в шестнадцатеричном редакторе). Мне нужны младшие биты справа (например, 00 00 00 06).
Как этого добиться?
Редактировать: спасибо strager дал мне имя то, что я искал. Я отредактировал название и теги, чтобы их было легче найти.
6 ответов:
У Джона Скита есть EndianBitConverter здесь, который должен выполнить эту работу. Просто используйте большой / маленький эндиан по желанию. В качестве альтернативы, просто сдвиньте данные несколько раз ; - p
int i = 6; byte[] raw = new byte[4] { (byte)(i >> 24), (byte)(i >> 16), (byte)(i >> 8), (byte)(i)};
Не совсем встроенный способ, но вы можете использовать это: EndianBit*. Спасибо Джону скиту: P
Вы хотите изменить порядок байтов (он же Endianness). Вы хотите распечатать big endian. Не знаю, как это сделать в C#, но вы можете поменять местами байты в целочисленном виде перед отправкой его в класс Binarywriter.
Вы можете проверить конечность текущей системы, используя систему .Метода bitconverter.IsLittleEndian . Я не уверен, использует ли BinaryWriter endianness системы или little endian для совместимости.
Если вы решили использовать что-то встроенное, Существует ряд перегрузок System. Net. IPAddress. HostToNetworkOrder ().
Они будут делать то, что вы хотите, потому что в подавляющем большинстве случаев порядок "хост" всегда является мало-эндианским, а порядок "сеть" -это Биг-эндианский, что и нужно.
Немного хак, чтобы использовать их, хотя, если вы ничего не делаете вообще, чтобы сделать с сетью.
Вы также можете использовать BitConverter для получения массива байтов, а затем реверсировать его. Что-то вроде:
Byte[] bytes = BitConverter.GetBytes(number); Array.Reverse(bytes); // Then, to write the values you use writer.Write(bytes);
Сейчас это не поможет, но я создал тикет подключения для BinaryReder/Writer для поддержки Bigendian out the box. Идите голосуйте за него здесь .