Pregunta

En este punto, la mayoría de la gente va a estar pensando "Ah mal puesto esto ..:"

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

Sin embargo .. el problema que tengo es que necesito el valor exacto de los bytes sin codificación sólo el valor puro para cada byte. Por ejemplo, si el valor de la cadena es (0xFF32) yo quiero que lo convierten demasiado {255,50}. que razón de esto es que tengo un formato de archivo que estoy tratando de leer que almacena de int como bytes para ahorrar y luego los lee cuando se abre el programa.

Esto es lo que tengo hasta ahora:

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

Así que cuando trato de leer el archivo que convierte los archivos de conventos decir 0xFF 0xFF en 0x3F porque es mayor que 127 y 0x3F es un?.

Lo siento si me parece un poco confuso:)

Gracias, Michael

¿Fue útil?

Solución

El problema es con su enfoque para comenzar con:

  

Necesito el valor exacto de los bytes con ninguna codificación

...

  

Por ejemplo, si el valor de la cadena es (0xFF32)

Eso es un poco como mirar una pintura al óleo y diciendo: "Quiero que los bytes para ese cuadro, sin codificación." No tiene sentido. El texto no es lo mismo que datos binarios. Una vez que entienda eso, es fácil llegar a la raíz del problema. Lo que realmente quiere es el contenido de un archivo como una matriz de bytes. Eso es fácil, porque los archivos son datos binarios! No se debe leer como texto en el primer lugar si no es realmente texto. Afortunadamente, .NET lo hace muy fácil:

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

Otros consejos

  

Sin embargo .. el problema que tengo es que necesito el valor exacto de los bytes sin codificación sólo el valor puro para cada byte.

A continuación, utilice la siguiente:

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

Devuelve los bytes como se almacena internamente por cadenas de .NET.

Pero todo esto es Codswallop: Una cadena es siempre vinculado a una codificación particular y no hay manera de evitarlo. Lo anterior fallará por ejemplo si el archivo contiene secuencias de código Unicode no válidos (lo que puede suceder) oa través de la normalización. Ya que, obviamente, no lo hace desea a string, no leen uno. Leer el archivo como datos binarios en su lugar.

// convertir una cadena en una matriz de bytes

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

// convertir una matriz de bytes en una cadena

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

Utilizar un BinaryReader .

¿Por qué convertir de cadena en absoluto? ¿No podría usted acaba de leer el contenido del archivo directamente en bytes?

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

Si desea bytes, usar un chorro!

¿Por qué diablos estás metiendo con un TextReader?

EDIT:

Como por su ejemplo, que está abriendo un archivo, por lo que sólo tiene que utilizar un FileStream.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top