Domanda

A questo punto la maggior parte delle persone saranno pensando "Ah ill post di questa ..:"

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

Comunque .. il problema che ho è che ho bisogno l'esatto valore dei byte senza codifica solo il puro valore per ogni byte. Per esempio, se il valore della stringa è (0xFF32) lo voglio convertire troppo {} 255,50. ha ragione di questo è che ho un formato di file che sto cercando di leggere che memorizza int di come byte li salva e poi legge quando il programma si apre.

Questo è quello che ho finora:

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

Così, quando cerco di leggere il file converte i conventi di file di dire 0xFF in 0x3F perché 0xFF è maggiore di 127 e 0x3F è un?.

Scusate se mi sembra un po 'di confusione:)

Grazie, Michael

È stato utile?

Soluzione

Il problema è con il vostro approccio per iniziare con:

  

mi serve il valore esatto dei byte senza codifica

...

  

Ad esempio, se il valore della stringa è (0xFF32)

Questo è un po 'come guardare un dipinto a olio e dicendo: "Voglio i byte per quella foto, senza codifica." Non ha senso. Il testo non è la stessa come dati binari. Una volta capito questo, è facile arrivare alla radice del problema. Che cosa si vuole veramente è il contenuto di un file come un array di byte. E 'facile, perché i file sono dati binari! Non si dovrebbe essere la lettura come testo, in primo luogo, se non è in realtà il testo. Fortunatamente, .NET rende il tutto veramente facile:

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

Altri suggerimenti

  

Comunque .. il problema che ho è che ho bisogno l'esatto valore dei byte senza codifica solo il valore puro per ogni byte.

Quindi utilizzare questo:

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

Si restituisce i byte come memorizzati internamente da stringhe .NET.

Ma tutto questo è codswallop: Una stringa è sempre legati ad un particolare codifica e non c'è modo intorno ad esso. Quanto sopra non riuscirà ad esempio se il file contiene sequenze non valide di codice Unicode (che possono accadere) o attraverso la normalizzazione. Dal momento che, ovviamente, non fare volete un string, non leggere uno. Leggere il file come dati binari, invece.

// convertire una stringa in un array di byte

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

// convertire un array di byte in una stringa

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

Perché convertire da stringa a tutti? Non poteva solo leggere il contenuto del file direttamente in byte?

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

Se si desidera byte, utilizzare un flusso!

Perché diavolo stai scherzi con un TextReader?

EDIT:

Secondo il vostro esempio, si sta aprendo un file, quindi basta usare un FileStream.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top