В C# преобразовать строку в массив Byte[] эквивалент

в этот момент большинство людей будут думать: "ах, я опубликую это..:"

byte[] dataB= System.Text.Encoding.ASCII.GetBytes(data);

однако.. проблема в том, что мне нужно точное значение байтов без кодировки только чистое значение для каждого байта. Например, если значение строки (0xFF32), я хочу, чтобы она тоже преобразовала его {255,50}. причина этого в том, что у меня есть формат файла, который я пытаюсь прочитать, который хранит int, поскольку байты сохраняют их, а затем читает их, когда программа открывается.

это то, что я до сих пор:

...
dialog.InitialDirectory =
    Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop) +
    "/Test";

dialog.Title="Open File";

if (dialog.ShowDialog(this) == DialogResult.OK)
{
    StreamReader reader = new StreamReader(dialog.FileName);
    string data = reader.ReadToEnd();
    reader.Close();
    byte[] fileC = System.Text.Encoding.ASCII.GetBytes(data);
    File_Read(dialog.FileName,fileC);
}
...

поэтому, когда я пытаюсь прочитать файл, он преобразует файловые монастыри, скажем, 0xFF в 0x3F, потому что 0xFF больше 127, а 0x3F-это ?.

Извините, если я кажусь немного путаешь :)

спасибо, Майкл!--3-->

6 ответов


проблема заключается в вашем подходе, чтобы начать с:

Мне нужно точное значение байтов без кодировки

...

например, если значение строки (0xFF32)

это немного похоже на то, как смотреть на картину маслом и говорить: "мне нужны байты для этой картины без кодировки."Это не имеет смысла. Текст не то же самое, что двоичные данные. Как только вы поймете это, легко добраться до корень проблемы. Что вы действительно хотите это содержимое как массив байтов. Это легко, потому что файлы являются двоичными данными! Вы не должны читать его как текст, в первую очередь, если это не текст. К счастью, .NET делает это очень легко:

byte[] fileC = File.ReadAllBytes(dialog.FileName);

однако.. проблема в том, что мне нужно точное значение байтов без кодировки только чистое значение для каждого байта.

тогда используйте это:

byte[] dataB = System.Text.Encoding.Unicode.GetBytes(data);

он возвращает байты, хранящиеся внутри строк .NET.

но все это codswallop: строка всегда связано с определенной кодировкой, и нет никакого способа обойти это. Вышеизложенное не удастся, например, если файл содержит недопустимые последовательности кода Unicode (которые может случиться) или через нормализацию. Поскольку вы, очевидно, не хочу a string, Не читайте. Вместо этого прочитайте файл как двоичные данные.


/ / преобразование строки в массив байтов

public static byte[] StrToByteArray(string str)
{
    System.Text.UTF8Encoding  encoding=new System.Text.UTF8Encoding();
    return encoding.GetBytes(str);
}

/ / преобразование массива байтов в строку

public string ByteArrayToStr(byte [] dBytes)
{
System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();
return enc.GetString(dBytes);
}

использовать BinaryReader.


зачем вообще конвертировать из строки? Не могли бы вы просто прочитать содержимое файла в байтах?

byte[] fileC = File.ReadAllBytes(dialog.FileName);

Если вы хотите байты, используйте поток!

Почему вы возитесь с TextReader?

EDIT:

в соответствии с вашим примером вы открываете файл, поэтому просто используйте FileStream.