Напиши байт, как им пользоваться - PullRequest
1 голос
/ 11 июля 2010

Как мне использовать WriteByte?Приведенный ниже код не будет работать, так как возникнет ошибка CS1502 и ошибка CS1502 в файле stream.WriteByte (totalSeasons);линия.Это разочаровывает, потому что я невероятно близок к завершению этой программы.

По сути, моя проблема заключается в том, что мне нужно записывать двоичные данные в файл одним нажатием кнопки.Я могу просто написать это, например: stream.WriteByte (0xCD);Проблема заключается в том, что мне нужно разрешить пользователю вводить данные, которые они хотят записать в текстовое поле, а затем одним нажатием кнопки данные преобразуются из десятичного в шестнадцатеричное, а затем вставляются. Я думаю, что яЯ разобрался с частью преобразования, но я не могу редактировать двоичный файл с данными, потому что кажется, что WriteByte может записывать только шестнадцатеричные значения, такие как 0xCD, и, кажется, нет никакого способа сохранить шестнадцатеричное значение и записать его.Я пробовал stream.WriteByte (ByteName);но это идет с ошибками, описанными выше.

void BtnTotalSeasonsClick(object sender, EventArgs e)
{
    using (var stream = new FileStream(drvFile, FileMode.Open, FileAccess.ReadWrite))  
    { 
        System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
        Byte[] totalSeasons = enc.GetBytes(txtTotalSeasons.Text);
        stream.Position = 4; 
        stream.WriteByte(totalSeasons);
    } 
}

Ответы [ 3 ]

3 голосов
/ 11 июля 2010

totalSeasons - это больше, чем один байт, поэтому вы бы вызвали метод Write , который записывает целый блок байтов.байт?Возможно, вы ищете Byte.TryParse вместо Encoding.GetBytes.

РЕДАКТИРОВАТЬ: Предоставить полное сообщение об ошибке, а не только номер.Кроме того, что именно находится в текстовом поле.Вы, кажется, запутались насчет шестнадцатеричной, десятичной, двоичной и ASCII.Это разные строковые представления числа.

0xCD не является шестнадцатеричным значением.Это C # -конформное шестнадцатеричное представление числа.(Другое шестнадцатеричное представление, не допускаемое C #, это CDh).Компилятор превращает его в число во внутреннем формате .NET (которое бывает двоичным, но это не важно).Затем вызов WriteByte или Write сохраняет номер в файле в двоичном виде.Вы получите тот же результат от stream.WriteByte(0xCD), stream.WriteByte(206) или stream.WriteByte(0316), так как компилятор преобразует их все в одно и то же внутреннее представление.Если вы хотите записать переменную, тогда вообще нет необходимости использовать hex, вам нужно внутреннее представление, которого ожидает WriteByte.

Вы сказали, что пользователь вводит число от 0 до 255 в десятичном виде?Затем требуется преобразование из десятичного строкового представления во внутреннее представление, это называется «синтаксическим анализом».

Попробуйте этот код:

stream.WriteByte(Byte.Parse(txtTotalSeasons.Text));
1 голос
/ 11 июля 2010

Вы пробовали:

foreach (var b in totalSeasons)
{
  stream.WriteByte(b);
}

WriteByte записывает один байт за раз, а не массив байтов.

0 голосов
/ 11 июля 2010

Рассмотрите возможность использования BinaryWriter .

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