2012-03-12 6 views
17

Próbuję przewidzieć ciąg znaków reprezentujący tablicę bajtów zakodowanych w base64.Przewidywanie rozmiaru bajtu bajtów zakodowanych w base64 []

Znalazłem poniższy wzór, jednak długość rzeczywistego encodedString jest 4 większa niż base64EncodedSize.

Cały pomysł polega na obliczeniu/przewidywaniu, jaki będzie zakodowany rozmiar ciągu dla danego byte[]. Wolałbym nie konwertować byte[] na ciąg podstawowy 64 tylko po to, by określić jego długość.

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

Och. Liczba całkowita dzieląca się przed pomnożeniem? Zastanawiasz się, dlaczego wynik jest zbyt mały? – adelphus

+0

Wow, nie mogę uwierzyć, że tego nie zauważyłem. To zawsze proste rzeczy. :) Dzięki. –

Odpowiedz

25

To będzie

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