válida una para net matriz longitud convert caracteres cadena base64binary array c# .net string bytearray base64

c# - net - longitud no válida para una matriz o cadena de caracteres base-64.



¿Cómo convertir una cadena en una matriz de bytes base64? ¿Sería esto válido? (5)

Puedes usar:

De byte [] a cadena:

byte[] array = somebytearray;

string result = Convert.ToBase64String(array);

De cadena a byte []:

array = Convert.FromBase64String(result);

Intento escribir una función que convierta una cadena en una matriz de bytes base64. Lo he intentado con este enfoque:

public byte[] stringToBase64ByteArray(String input) { byte[] ret = System.Text.Encoding.Unicode.GetBytes(input); string s = Convert.ToBase64String(input); ret = System.Text.Encoding.Unicode.GetBytes(s); return ret; }

¿Esta función produciría un resultado válido (siempre que la cadena esté en Unicode)? ¡Gracias!


Representar una cadena como un blob representado como una cadena es impar ... ¿Hay alguna razón por la que no puedas usar la cadena directamente?

La cadena siempre es unicode; son los bytes codificados los que cambian. Como base-64 siempre es <128, usar unicode en la última parte parece excesivo (a menos que eso exija el formato de cable). Personalmente, usaría UTF8 o ASCII para los últimos GetBytes modo que cada carácter de base 64 solo tome un byte.


Sí, produciría una cadena codificada en base64 de la representación little-endian UTF-16 de su cadena de origen. Tenga en cuenta que, AFAIK, no es realmente común usar UTF-16 en base64, normalmente se usa ASCII o UTF-8. Sin embargo, lo importante aquí es que el emisor y el receptor acuerden qué codificación debe usarse.

No entiendo por qué reconvierte la cadena base64 en una matriz de bytes: base64 se usa para evitar incompatibilidades de codificación cuando se transmite, por lo que debe guardarse como una cadena y emitirlo en el formato requerido por el protocolo que utiliza para transmitir los datos . Y, como dijo Marc, definitivamente es excesivo usar UTF-16 para ese fin, ya que base64 incluye solo 64 caracteres, todos menores de 128.


Se ve bien, aunque el enfoque es extraño. Pero use Encoding.ASCII.GetBytes () para convertir la cadena base64 en byte []. La codificación Base64 solo contiene caracteres ASCII. El uso de Unicode te proporciona un byte extra de 0 para cada personaje.


Todas las cadenas en .NET son unicode. Este código producirá un resultado válido, pero el consumidor de la cadena BASE64 también debe estar habilitado para Unicode.