C# 将字节数组转换为base64字符串

C# 将字节数组转换为base64字符串,c#,arrays,base64,byte,C#,Arrays,Base64,Byte,假设我有两个字节数组 在第一个场景中,我连接两个数组(使用Buffer.BlockCopy),然后将结果转换为base64字符串 在第二个场景中,我将每个字节数组转换为base64字符串,然后连接这些字符串 两个结果是否相同?如果第一个数组的长度可被3整除,则结果将相同,在所有其他情况下,两个base64字符串的串联结果将不同(并且base64无效),因为第一个字符串的末尾填充了字节。第二个数组的长度对于此操作并不重要,因为填充始终位于末尾 为什么“可被3整除”-因为base64每3个字节编码一

假设我有两个字节数组

在第一个场景中,我连接两个数组(使用Buffer.BlockCopy),然后将结果转换为base64字符串

在第二个场景中,我将每个字节数组转换为base64字符串,然后连接这些字符串


两个结果是否相同?

如果第一个数组的长度可被3整除,则结果将相同,在所有其他情况下,两个base64字符串的串联结果将不同(并且base64无效),因为第一个字符串的末尾填充了字节。第二个数组的长度对于此操作并不重要,因为填充始终位于末尾

为什么“可被3整除”-因为base64每3个字节编码一个正好4个字符,这样长度的数组不需要在末尾填充。有关正式详细信息和更具可读性的解释,请参阅

也就是说,如果第一个数组的长度为4字节,则转换后的字符串末尾会出现
=
,与其他base64字符串连接将导致base64文本无效

Convert.ToBase64String(new byte[]{1,2,3,4}) // AQIDBA==
连接在数组或字符串上的效果相同的示例情况:

 Convert.ToBase64String(new byte[]{1,2,3}) + // length divisible by 3
 Convert.ToBase64String(new byte[]{4,5}) 
 == 
 Convert.ToBase64String(new byte[]{1,2,3,4,5}) // AQIDBAU=
产出:

10 20 30 40 50 60 70 80 
ChQeKDI8RlA=
ChQeKDI8RlA=MjxGUA==
10 20 30 40 50 60 70 80 
ChQeKDI8RlA=
ChQeKDI8RlA=MjxGUA==