2012-03-12 21 views
17

Estoy tratando de predecir la representación de la cadena de tamaño de una matriz de bytes codificada en base64.Predecir el tamaño de byte de un byte codificado en base64 []

He llegado con la siguiente fórmula, sin embargo, la longitud de la actual encodedString es 4 más grande que la base64EncodedSize.

La idea general aquí es calcular/predecir cuál sería el tamaño de cadena codificado para un byte[] dado. Preferiría no convertir el byte[] en una cadena base 64 solo para determinar su longitud.

FileInfo pdfFile = new FileInfo(@"C:\TEMP\1.pdf"); 

long originalSizeInBytes = pdfFile.Length; 

String encodedString = Convert.ToBase64String(File.ReadAllBytes(pdfFile.FullName)); 

long base64EncodedSize = (originalSizeInBytes/3) * 4; 

---------------------------------------------------------------------------------- 
- Results - 
----------------------------------------------------------------------------------- 
    originalSizeInBytes       913663 long 
    base64EncodedSize       1218216 long 
    encodedString.Length      1218220 int 
    base64EncodedSize       1218216 long 
    encodedString.Length - base64EncodedSize 4  long 
+3

Oh querido. ¿Entero dividido antes de multiplicarse? ¿Y te preguntas por qué el resultado es demasiado pequeño? – adelphus

+0

Guau, no puedo creer que no haya notado eso. Siempre son las cosas simples. :) Gracias. –

Respuesta

25

Eso será

long base64EncodedSize = 4 * (int)Math.Ceiling(originalSizeInBytes/3.0);