当我传入64个字节时,为什么C#Convert.ToBase64String()给我88作为长度?

Fra*_*kie 7 c# byte bits

我想了解以下内容:

如果我声明64字节作为数组长度(缓冲区).当我转换为基数为64的字符串时,它表示长度为88.长度不应该只有64,因为我传递的是64字节?我完全可能误解了这个实际的工作方式.如果是的话,请你解释一下.

//Generate a cryptographic random number
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();

// Create byte array
byte[] buffer = new byte[64];

// Get random bytes
rng.GetBytes(buffer);

// This line gives me 88 as a result. 
// Shouldn't it give me 64 as declared above?
throw new Exception(Convert.ToBase64String(buffer).Length.ToString());

// Return a Base64 string representation of the random number
return Convert.ToBase64String(buffer);
Run Code Online (Sandbox Code Playgroud)

das*_*ght 8

不,base-64编码使用整个字节来表示被编码的数据的六位.丢失的两位是仅使用字母数字,加号和斜杠作为符号的价格(基本上,不包括代表不可见的数字或纯ASCII/UTF-8编码中的特殊字符).得到的结果是(64*4/3)四舍五入到最接近的4字节边界.


Ica*_*rus 6

Base64编码将3个八位字节转换为4个编码字符; 因此

(64/3)*4≈(22*4)= 88字节.

在这里阅读