c# - una - convertir texto a base64 vb net
C#convierte cadena en su byte[] equivalente (6)
En este punto, la mayoría de las personas pensarán "Ah, publique 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, solo el valor puro para cada byte. Por ejemplo, si el valor de la cadena es (0xFF32), quiero que también lo convierta {255,50}. La razón de esto es que tengo un formato de archivo. Estoy intentando leer qué tiendas de int como bytes los guarda 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);
}
...
Entonces, cuando intento leer el archivo, convierte los conventos de archivos de 0xFF en 0x3F porque 0xFF es mayor que 127 y 0x3F es un?.
Lo siento si me parece un poco confuso :)
Gracias, Michael
Sin embargo ... el problema que tengo es que necesito el valor exacto de los bytes sin codificación, solo el valor puro para cada byte.
Luego usa esto:
byte[] dataB = System.Text.Encoding.Unicode.GetBytes(data);
Devuelve los bytes almacenados internamente por cadenas .NET.
Pero todo esto es codswallop: una cadena siempre está vinculada a una codificación particular y no hay forma de evitarla. Lo anterior fallará, por ejemplo, si el archivo contiene secuencias de códigos Unicode no válidos (lo que puede suceder) o mediante la normalización. Como obviamente no quieres una string
, no leas una. Lea el archivo como datos binarios en su lugar.
¿Por qué convertir de cadena en absoluto? ¿No podría simplemente leer el contenido del archivo directamente en bytes?
byte[] fileC = File.ReadAllBytes(dialog.FileName);
El problema es con su enfoque para comenzar con:
Necesito el valor exacto de los bytes sin codificación
...
Por ejemplo, si el valor de la cadena es (0xFF32)
Es como mirar una pintura al óleo y decir: "Quiero los bytes para esa imagen, sin codificación". No tiene sentido. El texto no es lo mismo que los datos binarios. Una vez que comprenda eso, es fácil llegar a la raíz del problema. Lo que realmente quieres es el contenido de un archivo como una matriz de bytes. Eso es fácil, ¡porque los archivos son datos binarios! No debería leerlo como texto en primer lugar si realmente no es texto. Afortunadamente, .NET lo hace realmente fácil:
byte[] fileC = File.ReadAllBytes(dialog.FileName);
Si quieres bytes, utiliza un Stream!
¿Por qué diablos te estás metiendo con un TextReader?
EDITAR:
Según su ejemplo, está abriendo un archivo, así que simplemente use FileStream.
Use un BinaryReader .
// convierte 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);
}
// convierte una matriz de bytes en una cadena
public string ByteArrayToStr(byte [] dBytes)
{
System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();
return enc.GetString(dBytes);
}