C # convertono stringa nella sua byte [] equivalente
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
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.