C# conversione di una stringa in byte[] equivalente

A questo punto la maggior parte delle persone penserà “Ah malato questo post…:”

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

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

Questo è ciò 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 provo a leggere il file converte il file conventi di dire 0xFF in 0x3F, perché 0xFF è maggiore di 127 e 0x3F è ?.

Scusate se mi sembra un po ‘ di confusione 🙂

Grazie,
Michael

OriginaleL’autore redorkulated | 2009-02-12

6 Replies
  1. 17

    Il problema è con il vostro approccio per iniziare con:

    Ho bisogno l’esatto valore del byte con la codifica

    Per esempio, se il valore della stringa (0xFF32)

    Che è un po ‘ come guardare un dipinto ad olio e a dire: “voglio che i byte per l’immagine, senza codifica.” Non ha senso. Il testo non è lo stesso come dati binari. Una volta capito che, è facile arrivare alla radice del problema. Che cosa si vuole veramente è il contenuto di un file come un array di byte. Semplice, perché sono i file di dati binari! Non si dovrebbe leggere come testo, in primo luogo, se non è veramente il testo. Per fortuna, .NET rende davvero facile:

    byte[] fileC = File.ReadAllBytes(dialog.FileName);
    vorrei capire come file di bit, byte e tutto ciò che shizzle lavoro, che è il motivo per cui im in grado di capire la memorizzazione (ad esempio) un intero a 64 bit con 8 byte ho appena didnt know how per ottenere l’info :); grazie per il vostro aiuto
    Ma trattando di un file come se contiene del testo quando non è un malinteso che brucia così molte persone. Ogni volta che si inizia a pensare “il contenuto di una stringa di byte senza una codifica” che quasi certamente significa che c’è un bug in agguato.
    ho wasnt guardando la “stringa” come testo, in questo caso, stavo cercando di ottenere solo il binario puro come questo è ciò che il file è in corso la memorizzazione. Capisco il tuo punto, però, quindi grazie 🙂
    Mi dispiace nag – so che può sembrare condiscendente. Grazie per la comprensione 🙂
    nessun problema, grazie per aver risolto il mio problema 😀

    OriginaleL’autore Jon Skeet

  2. 13

    Comunque.. il problema che ho è che ho bisogno l’esatto valore del byte con la codifica solo il puro valore per ogni byte.

    Quindi utilizzare questo:

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

    Restituisce il byte memorizzati internamente .NET stringhe.

    Ma tutto questo è codswallop: Una stringa è sempre legati a una particolare codifica e non c’è modo intorno ad esso. Di cui sopra non riuscirà ad esempio, se il file contiene codice Unicode sequenze (che può succedere) o attraverso la normalizzazione. Dato che ovviamente non desidera un string, non la lettura di uno. Leggere il file come dati binari, invece.

    OriginaleL’autore Konrad Rudolph

  3. 11

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

    OriginaleL’autore Atif Mahmood

  4. 3

    Perché la conversione da stringa a tutti? Non è che puoi solo leggere il contenuto del file in byte?

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

    OriginaleL’autore Dan

  5. 1

    Se vuoi byte, utilizzare un Flusso di!

    Perché sulla terra si pasticciano con un TextReader?

    EDIT:

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

    hey, im davvero nuovo per C# appena trovato un esempio per leggere i file e questo è quello che io rammendata :P. sapevo che i file potrebbero essere letti in qualsiasi altro modo 🙂

    OriginaleL’autore leppie

Lascia un commento