Convertir una Array de Bytes a string

25/08/2009 - 01:51 por ANT1 | Informe spam
Hola a todos.

Hacía mucho que no escribía por aquí, espero que aún quieran ayudarme.

Estoy trabajando en un proyecto personal en el que trabajo con
imágenes JPG. A la hora de acceder a los PropertyItems que tiene y
convertir, por ejemplo, el título del Array de Bytes que es a string
mediante:

private string ByteArrayToStr(byte[] bytes)
{
return System.Text.ASCIIEncoding.ASCII.GetString(bytes);
}

Me convierte el array pero aparecen un montón de '/0' insertados por
todo el string.
¿Por qué es esto?¿cómo lo puedo solucionar?

Gracias y un saludo

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
25/08/2009 - 09:06 | Informe spam
"ANT1" wrote in message
news:
[...] A la hora de acceder a los PropertyItems que tiene y
convertir, por ejemplo, el título del Array de Bytes que es a string
mediante:

private string ByteArrayToStr(byte[] bytes)
{
return System.Text.ASCIIEncoding.ASCII.GetString(bytes);
}

Me convierte el array pero aparecen un montón de '/0' insertados por
todo el string.
¿Por qué es esto?¿cómo lo puedo solucionar?




Tiene pinta de que el array de bytes no contiene ASCII, sino otra
codificación distinta. Por ejemplo, si fuera Unicode, la mayor parte de los
caracteres tendrán 16 bits de los cuales 8 serán ceros, y al tratar de
interpretarlo como ASCII ese byte de ceros será interpretado como carácter
cero ('\0').

Trata de averiguar cuál es realmente la codificación utilizada, y cambia
el Encoding.ASCII por el que corresponda.
Respuesta Responder a este mensaje
#2 Vany
25/08/2009 - 16:39 | Informe spam
mira yo tengo un ejemplo mas o menos para lo que necesitas en mi caso
lo envio a un archivo xml pero tu lo puedes acoplar para que te lo
mande a txt o a string.
Con un stream esa es la clave :) espero que te sirva.

epgBytes // arreglo de bytes

StreamWriter writer = File.CreateText(fileName); //stream writer para
guardar el resultado

List<char> epgList = new List<char>();
for (int i = 40; i * 2 < epgBytes.Length; i++)
{
uint temp;
char thisChar;
int epgIndex = 2 * i;
// Load the high byte into the placeholder...
temp = epgBytes[epgIndex + 1];
temp <<= 8; // Shift that byte over to the high end;
// Add the low byte into the placeholder...
temp += epgBytes[epgIndex];
thisChar = (char)temp;
// And store the character into the list
epgList.Add((char)temp);
writer.Write((char)temp);
}

writer.Close();
Respuesta Responder a este mensaje
#3 Juan Carlos Paramá
26/08/2009 - 10:47 | Informe spam
Hola,

No tengo ni idea como va el tema de los tags en JPEG pero por el código
que envias si parece UNICODE (lo cual es bastante lógico dado la difusión
del formato). Así el código que envia ANT1 quedaría como:

private string ByteArrayToStr(byte[] bytes)
{
return System.Text.UnicodeEncoding.Unicode.GetString(bytes);
}


Ojo, que no se si el estándar JPEG obliga a utilizar un formato
especifico para las cadenas o cada uno puede utilizar el que le parezca
(aunque supongo que entonces habría que especificarlo en algun sitio del
archivo).

Saludos,

Juan Carlos Paramá

"Vany" escribió en el mensaje de noticias
news:
mira yo tengo un ejemplo mas o menos para lo que necesitas en mi caso
lo envio a un archivo xml pero tu lo puedes acoplar para que te lo
mande a txt o a string.
Con un stream esa es la clave :) espero que te sirva.

epgBytes // arreglo de bytes

StreamWriter writer = File.CreateText(fileName); //stream writer para
guardar el resultado

List<char> epgList = new List<char>();
for (int i = 40; i * 2 < epgBytes.Length; i++)
{
uint temp;
char thisChar;
int epgIndex = 2 * i;
// Load the high byte into the placeholder...
temp = epgBytes[epgIndex + 1];
temp <<= 8; // Shift that byte over to the high end;
// Add the low byte into the placeholder...
temp += epgBytes[epgIndex];
thisChar = (char)temp;
// And store the character into the list
epgList.Add((char)temp);
writer.Write((char)temp);
}

writer.Close();
Respuesta Responder a este mensaje
#4 Herni
26/08/2009 - 13:03 | Informe spam
On 25 ago, 01:51, ANT1 wrote:
Hola a todos.

Hacía mucho que no escribía por aquí, espero que aún quieran ayudarme.

Estoy trabajando en un proyecto personal en el que trabajo con
imágenes JPG. A la hora de acceder a los PropertyItems que tiene y
convertir, por ejemplo, el título del Array de Bytes que es a string
mediante:

private string ByteArrayToStr(byte[] bytes)
        {
            return System.Text.ASCIIEncoding.ASCII.GetString(bytes);
        }

Me convierte el array pero aparecen un montón de '/0' insertados por
todo el string.
¿Por qué es esto?¿cómo lo puedo solucionar?

Gracias y un saludo



Lo que tienes que hacer es usar System.Convert.ToBase64String
(bytearray)
Recibe un parámetro extra que inserta saltos de línea cada 74
caracteres.
Respuesta Responder a este mensaje
#5 ANT1
26/08/2009 - 15:39 | Informe spam
Gracias a todos.

El problema era que usaba Unicode, y no se cual usa por defecto el
código que usaba yo. Gracias a todos.

Respecto al ToBase64String, Henri, me temo que aquí no funciona, no
devuelve la información correcta.

Solo hay una cosa que supongo que será un byte de control, y es que al
final del string añade siempre un '/0'.

Seguiré trabajando en ello ahora y en la conversion inversa, ya
comentaré el resultado final para gente que le pueda resultar útil en
su momento.

De nuevo gracias a todos.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida