Avatar ·

如何在 C# 中将字节数组转换为十六进制字符串并转换回来?

大家好!我是一名 C# 初学者,在处理二进制数据时遇到了问题。我需要将字节数组(例如 SHA256 哈希)保存到文本文件中,然后再读取回来。我意识到不能直接写入字节——会得到乱码。需要将它们转换为十六进制字符的字符串,然后在读取时再将这个字符串转换回字节数组。

我尝试自己实现,但代码运行不正确。以下是我写的:

byte[] data = { 0x0F, 0xBA, 0x01, 0xFF };
string hex = "";
foreach (byte b in data)
{
    hex += b.ToString("X");
}
// 结果是 "FBA1FF" —— 没有前导零!
Console.WriteLine(hex);

当我尝试将这个字符串读回时,我无法确定一个字节在哪里结束,另一个字节在哪里开始。例如,字符串 "FBA1FF" 可以有多种解释:{0xFB, 0xA1, 0xFF} 或 {0x0F, 0xBA, 0x1F, 0xF} —— 这是错误的。

我听说过 Convert.ToHexString 和 Convert.FromHexString 方法,但我不确定它们是否是最好的解决方案。请告诉我如何正确地进行这种转换?是否有标准的方法来处理这种情况?