Конвертировать C printf (% c) в C # - PullRequest
4 голосов
/ 13 августа 2010

Я пытаюсь преобразовать этот C printf в C #

printf("%c%c",(x>>8)&0xff,x&0xff);

Я пробовал что-то вроде этого:

int x = 65535;

char[] chars = new char[2];
chars[0] = (char)(x >> 8 & 0xFF);
chars[1] = (char)(x & 0xFF);

Но я получаю другие результаты.Мне нужно записать результат в файл, поэтому я делаю это:

tWriter.Write(chars);

Может быть, в этом проблема.

Спасибо.

Ответы [ 3 ]

3 голосов
/ 13 августа 2010

В .NET переменные char хранятся как 16-разрядные (2-байтовые) числа без знака в диапазоне значений от 0 до 65535. Используйте это:

        int x = (int)0xA0FF;  // use differing high and low bytes for testing

        byte[] bytes = new byte[2];
        bytes[0] = (byte)(x >> 8);  // high byte
        bytes[1] = (byte)(x);       // low byte
1 голос
/ 13 августа 2010

Если вы собираетесь использовать BinaryWriter, чем просто две записи:

bw.Write((byte)(x>>8));
bw.Write((byte)x);

Имейте в виду, что вы только что выполнили запись Big Endian. Если это должно быть прочитано как 16-разрядное целое число чем-то, что ожидает его в форме Little Endian, поменяйте местами записи.

0 голосов
/ 13 августа 2010

Хорошо,

Я получил его, используя предложение Mitch Wheat и изменив TextWriter на BinaryWriter.

Вот код

System.IO.BinaryWriter bw = new System.IO.BinaryWriter(System.IO.File.Open(@"C:\file.ext", System.IO.FileMode.Create));

int x = 65535;

byte[] bytes = new byte[2];
bytes[0] = (byte)(x >> 8);
bytes[1] = (byte)(x);

bw.Write(bytes);

Спасибо всем.Особенно Митчу Пшенице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...