Как записать целые в текстовый файл с младшими битами на правой стороне (Bigendian) - PullRequest
3 голосов
/ 19 декабря 2008

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

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

РЕДАКТИРОВАТЬ: Спасибо Стрэджер за то, что дал мне имя для того, что я искал. Я отредактировал заголовок и теги, чтобы их было легче найти.

Ответы [ 6 ]

6 голосов
/ 19 декабря 2008

Не совсем встроенный способ, но вы можете использовать это: EndianBit *. Спасибо Джону Скиту: P

6 голосов
/ 19 декабря 2008

У Джона Скита есть EndianBitConverter здесь , который должен выполнить эту работу. Просто используйте big / little endian по желанию. Либо просто сдвиньте данные несколько раз; -p

        int i = 6;
        byte[] raw = new byte[4] {
            (byte)(i >> 24), (byte)(i >> 16),
            (byte)(i >> 8), (byte)(i)};
2 голосов
/ 19 декабря 2008

Вы хотите изменить Порядок байтов (он же Endianness) . Вы хотите распечатать big endian . Не знаю, как вы это сделаете в C #, но вы можете поменять свои байты в целом числе перед отправкой в ​​класс BinaryWritter.

Вы можете проверить порядковый номер текущей системы, используя System.BitConverter.IsLittleEndian . Я не уверен, использует ли BinaryWriter порядковый или системный порядок байтов для совместимости.

1 голос
/ 19 декабря 2008

Вы также можете использовать BitConverter, чтобы получить байтовый массив, а затем обратить его. Что-то вроде:

Byte[] bytes = BitConverter.GetBytes(number);
Array.Reverse(bytes);

// Then, to write the values you use
writer.Write(bytes);
1 голос
/ 19 декабря 2008

Если вы решили использовать что-то встроенное, существует несколько перегрузок System.Net.IPAddress.HostToNetworkOrder ().

Они будут делать то, что вы хотите, потому что в подавляющем большинстве случаев порядок «хоста» всегда является прямым порядком байтов, а порядок «сети» является порядком байтов, что вам нужно.

Хотя это немного хакерски, если вы вообще ничего не делаете с сетью.

0 голосов
/ 25 августа 2009

Теперь это не поможет, но я создал билет для подключения для BinaryReder / Writer для поддержки Bigendian из коробки. Иди проголосуй за это здесь .

...