Frage

An diesem Punkt die meisten Leute denken "Ah krank Post this ..:"

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

Allerdings .. ich habe das Problem ist, ich den genauen Wert des Bytes ohne Codierung nur den reinen Wert für jedes Byte benötigen. wenn der Wert des Strings Zum Beispiel ist (0xFF32) Ich möchte es konvertieren zu {} 255,50. er Grund dafür ist, ich ein Dateiformat habe ich zu lesen, bin versucht, die int die speichert als speichert sie Bytes und liest sie dann, wenn das Programm geöffnet wird.

Das ist, was ich habe, so weit:

...
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);
}
...

Also, wenn ich versuche, und lesen Sie die Datei es die Datei Klöster wandelt von sagen 0xFF in 0x3F weil 0xFF ist größer als 127 und 0x3F ein?.

Sorry, wenn ich ein bisschen verwirrend erscheinen:)

Danke, Michael

War es hilfreich?

Lösung

Das Problem ist, mit Ihrem Ansatz zu beginnen mit:

  

Ich brauche den genauen Wert des Bytes ohne Codierung

...

  

Zum Beispiel, wenn der Wert der Zeichenfolge (0xFF32)

Das ist ein bisschen wie bei einem Ölgemälde suchen und zu sagen: „Ich mag das Bytes für das Bild, ohne Codierung.“ Es macht keinen Sinn machen. Dieser Text ist nicht die gleiche wie binäre Daten. Sobald Sie das verstehen, dann ist es einfach, an die Wurzel des Problems zu bekommen. Was Sie wirklich wollen, ist der Inhalt einer Datei als Byte-Array. Das ist einfach, weil Dateien sind binäre Daten! Sie sollen nicht als Text in erster Linie sein zu lesen, wenn es nicht wirklich Text ist. Glücklicherweise macht .NET dies ganz einfach:

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

Andere Tipps

  

Allerdings .. ich habe das Problem ist, ich den genauen Wert des Bytes ohne Codierung nur den reinen Wert für jedes Byte benötigen.

Dann folgt verwenden:

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

Es gibt die Bytes als intern von .NET Strings gespeichert.

Das alles ist aber codswallop: Ein String ist immer in Verbindung mit einer bestimmten Codierung und es gibt keinen Weg drum herum. Die oben fehl z.B. Wenn die Datei enthält ungültige Unicode-Codesequenzen (was passieren kann), oder durch Normalisierung. Da Sie offensichtlich nicht tun wollen ein string, lesen nicht ein. Lesen Sie die Datei als binäre Daten statt.

// konvertiert eine Zeichenfolge in einem Byte-Array

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

// konvertiert einen Byte-Array in eine Zeichenfolge

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

Verwenden Sie einen Binary .

Warum überhaupt von String-Format konvertieren? Könnten Sie nicht den Inhalt der Datei lesen nur direkt in Bytes?

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

Wenn Sie Bytes, verwenden Sie einen Stream-!

Warum in aller Welt werden Sie mit einem Textreader durcheinander?

EDIT:

Wie pro Ihr Beispiel, Sie öffnen eine Datei, so dass nur ein Filestream verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top