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

Foi útil?

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

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top