Как записать ints в текстовый файл с нижними битами на правой стороне (Bigendian)


По умолчанию класс BinaryWriter записывает значения int с нижними битами слева (например, (int)6 становится 06 00 00 00, когда результирующий файл просматривается в шестнадцатеричном редакторе). Мне нужны младшие биты справа (например, 00 00 00 06).

Как этого добиться?

Редактировать: спасибо strager дал мне имя то, что я искал. Я отредактировал название и теги, чтобы их было легче найти.

6 3

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. Идите голосуйте за него здесь .