Calculate the size to a Base64 encoded message

2020-02-09 00:21发布

I have a binary string that I am encoding in Base 64. Now, I need to know before hand the size of the final Base 64 encoded string will be.

Is there any way to calculate that?

Something like:

BinaryStringSize is 64Kb EncodedBinaryStringSize will be 127Kb after encoding.

Oh, the code is in C.

Thanks.

标签: c base64
9条回答
我想做一个坏孩纸
2楼-- · 2020-02-09 00:40

Check out the b64 library. The function b64_encode2() can give a maximum estimate of the required size if you pass NULL, so you can allocate memory with certainty, and then call again passing the buffer and have it do the conversion.

查看更多
女痞
3楼-- · 2020-02-09 00:40

I think this formula should work:

b64len = (size * 8 + 5) / 6
查看更多
我只想做你的唯一
4楼-- · 2020-02-09 00:40
 if (inputSize == 0) return 0;

 int size = ((inputSize - 1) / 3) * 4 + 4;
 int nlines = (size - 1)/ maxLine + 1;
 return size + nlines * 2;

This formula adds a terminating CRLF (MIME, rfc2045) if and only if the last line does not fit exactly in max line length.

查看更多
干净又极端
5楼-- · 2020-02-09 00:42

Here is a simple C implementation (without modulus and trinary operators) for raw base64 encoded size (with standard '=' padding):

int output_size;
output_size = ((input_size - 1) / 3) * 4 + 4;

To that you will need to add any additional overhead for CRLF if required. The standard base64 encoding (RFC 3548 or RFC 4648) allows CRLF line breaks (at either 64 or 76 characters) but does not require it. The MIME variant (RFC 2045) requires line breaks after every 76 characters.

For example, the total encoded length using 76 character lines building on the above:

int final_size;
final_size = output_size + (output_size / 76) * 2;

See the base64 wikipedia entry for more variants.

查看更多
放荡不羁爱自由
6楼-- · 2020-02-09 00:49

Base 64 transforms 3 bytes into 4.

If you're set of bits does not happen to be a multiple of 24 bits, you must pad it out so that it has a multiple of 24 bits (3 bytes).

查看更多
地球回转人心会变
7楼-- · 2020-02-09 00:51

The actual length of MIME-compliant base64-encoded binary data is usually about 137% of the original data length, though for very short messages the overhead can be a lot higher because of the overhead of the headers. Very roughly, the final size of base64-encoded binary data is equal to 1.37 times the original data size + 814 bytes (for headers).

In other words, you can approximate the size of the decoded data with this formula:

BytesNeededForEncoding = (string_length(base_string) * 1.37) + 814;
BytesNeededForDecoding = (string_length(encoded_string) - 814) / 1.37;

Source: http://en.wikipedia.org/wiki/Base64

查看更多
登录 后发表回答