如何将字节字符串转换为字节数组?C#场景下的字节无损还原问题
如何将字节数组无损转换为字符串并还原?
兄弟,你当前的代码存在一个关键问题:在sender方法里,"" + pictureArray这个操作并没有把字节数组的实际内容转换成字符串——它只是调用了byte[]的默认ToString()方法,最终得到的字符串是"System.Byte[]",完全没有保存任何图片字节的信息,这自然没法在receiver里还原出原始数组。
要实现无损的字节数组↔字符串转换,最可靠的方式是使用Base64编码,它专门设计用来将二进制数据转换为可安全传输的ASCII字符串,并且完全可逆,不会丢失任何原始数据。
修正后的完整代码:
public static void sender(string message) { string path = "path of file here"; byte[] pictureArray = File.ReadAllBytes(path); // 将字节数组转换为Base64字符串 receiver(Convert.ToBase64String(pictureArray)); } public static void receiver(string message) { // 将Base64字符串还原为原始字节数组 byte[] bytesReceived = Convert.FromBase64String(message); // 这里就可以使用还原后的bytesReceived了,比如写入文件: // File.WriteAllBytes("output.jpg", bytesReceived); }
为什么Base64是正确选择?
- Base64编码会把每3个字节的二进制数据转换为4个ASCII字符,所有字符都在可打印范围内,不会出现编码/解码错误。
- 转换过程完全可逆,还原后的字节数组和原始数组完全一致,满足无损转换的要求。
为什么不直接用字符串编码(比如UTF-8)?
因为不是所有字节序列都对应有效的UTF-8字符,强行用Encoding.UTF8.GetString()转换会导致部分字节被替换为替换字符(�),还原时就无法得到原始数据了,所以这种方式不能保证无损。
内容的提问来源于stack exchange,提问作者Bitstaff
相关产品推荐
相关产品推荐

