2012-03-12 28 views
17

Sto provando a prevedere la rappresentazione della stringa di dimensioni di un array di byte codificati in base64.Prevedere la dimensione in byte di un byte codificato in base64 []

Mi è venuta in mente la formula seguente, tuttavia la lunghezza effettiva di encodedString è 4 maggiore di base64EncodedSize.

L'intera idea qui è calcolare/prevedere quale sarebbe la dimensione della stringa codificata per un dato byte[]. Preferirei non convertire lo byte[] in una stringa 64 di base solo per determinare la sua lunghezza.

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 cara. La divisione dei numeri interi prima di moltiplicare? E ti chiedi perché il risultato è troppo piccolo? – adelphus

+0

Wow, non posso credere di non averlo notato. Sono sempre le cose semplici. :) Grazie. –

risposta

25

Questo sarà

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