C # cadeia convertido em seu byte [] equivalente
Pergunta
Neste ponto, a maioria das pessoas vai estar pensando "Ah doente postar isso ..:"
byte[] dataB= System.Text.Encoding.ASCII.GetBytes(data);
No entanto .. o problema que tenho é que eu preciso o valor exato dos bytes com nenhuma codificação apenas o valor puro para cada byte. Por exemplo, se o valor da cadeia é (0xFF32) eu quero isso para convertê-lo também {255,50}. ele razão para isso é que tenho um formato de arquivo que estou tentando ler que armazena int de como bytes salva-los e, em seguida, lê-los quando o programa abre.
Isto é o que eu tenho até agora:
...
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);
}
...
Assim, quando tento ler o arquivo que converte os conventos de digamos 0xFF de arquivos em 0x3F porque 0xFF é maior do que 127 e 0x3F é um?.
Desculpe se eu parecer um pouco confuso:)
Obrigado, Michael
Solução
O problema é com a sua abordagem para começar com:
Eu preciso o valor exato dos bytes com nenhuma codificação
...
Por exemplo, se o valor da cadeia é (0xFF32)
Isso é um pouco como olhar para uma pintura a óleo e dizendo: "Quero que os bytes para essa imagem, sem codificação." Não faz sentido. O texto não é o mesmo que dados binários. Depois de entender isso, é fácil chegar à raiz do problema. O que você realmente quer é o conteúdo de um arquivo como uma matriz de bytes. Isso é fácil, porque os arquivos são dados binários! Você não deve estar lendo-lo como texto, em primeiro lugar, se não é realmente texto. Felizmente, .NET faz isso realmente fácil:
byte[] fileC = File.ReadAllBytes(dialog.FileName);
Outras dicas
No entanto .. o problema que tenho é que eu preciso o valor exato dos bytes sem codificação apenas o valor puro para cada byte.
Em seguida, use o seguinte:
byte[] dataB = System.Text.Encoding.Unicode.GetBytes(data);
Ele retorna os bytes como armazenado internamente pelo .NET strings.
Mas tudo isso é besteira: Uma corda é sempre ligado a uma codificação específica e não há maneira de contornar isso. A descrição acima irá falhar, por exemplo, se o arquivo contém seqüências inválidos Unicode de código (o que pode acontecer) ou através da normalização. Desde que você, obviamente, não deseja a string
, não leia um. Leia o arquivo como dados binários em vez.
// converter uma string para um array de bytes
public static byte[] StrToByteArray(string str)
{
System.Text.UTF8Encoding encoding=new System.Text.UTF8Encoding();
return encoding.GetBytes(str);
}
// converter uma matriz de bytes em uma string
public string ByteArrayToStr(byte [] dBytes)
{
System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();
return enc.GetString(dBytes);
}
Use a BinaryReader .
Por convertido do corda em tudo? Você não pode apenas ler o conteúdo do arquivo diretamente em bytes?
byte[] fileC = File.ReadAllBytes(dialog.FileName);
Se você quiser bytes, use um córrego!
Por que diabos você está mexendo com um TextReader?
EDIT:
De acordo com o seu exemplo, você está abrindo um arquivo, então é só usar um FileStream.