2012-03-12 28 views
17

Tôi đang cố gắng dự đoán biểu diễn chuỗi kích thước của mảng byte được mã hóa base64.Dự đoán kích thước byte của byte được mã hóa base64 []

Tôi đã đưa ra công thức dưới đây, tuy nhiên độ dài thực tế encodedString lớn hơn base64EncodedSize.

Toàn bộ ý tưởng ở đây là để tính toán/dự đoán kích thước chuỗi được mã hóa sẽ là cho một số byte[] nhất định. Tôi không muốn chuyển đổi các byte[] đến một chuỗi 64 cơ sở chỉ để xác định chiều dài của nó.

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

Ôi trời ơi. Phân tách số nguyên trước khi bạn nhân lên? Và bạn tự hỏi tại sao kết quả lại quá nhỏ? – adelphus

+0

Chà, tôi không thể tin là mình không nhận ra điều đó. Nó luôn luôn là những điều đơn giản. :) Cảm ơn. –

Trả lời

25

Đó sẽ là

long base64EncodedSize = 4 * (int)Math.Ceiling(originalSizeInBytes/3.0); 
Các vấn đề liên quan