【发布时间】:2019-11-08 20:50:18
【问题描述】:
我以二进制形式读取文件,转换为十六进制字符串,再转换回二进制,然后写入新文件。 我希望有一个副本,但得到一个损坏的文件。
我一直在尝试不同的方法将二进制文件转换为十六进制字符串,但似乎无法保留整个文件。
byte[] binary1 = File.ReadAllBytes(@"....Input.jpg");
string hexString = "";
int counter1 = 0;
foreach (byte b in binary1)
{
counter1++;
hexString += (Convert.ToString(b, 16));
}
List<byte> bytelist = new List<byte>();
int counter2 = 0;
for (int i = 0; i < hexString.Length/2; i++)
{
counter2++;
string ch = hexString.Substring(i*2,2);
bytelist.Add(Convert.ToByte(ch, 16));
}
byte[] binary2 = bytelist.ToArray();
File.WriteAllBytes(@"....Output.jpg", binary2);
计数器 1 和计数器 2 的计数应该相同,但计数器 2 总是小 10% 左右。
我想获得一个重复的文件输出,我可以通过该字符串值传输它。
【问题讨论】:
-
您应该检查哪些字节不同。这可以帮助您解决这个问题。
-
大部分字节不同,大约 95%。这可能是由于缺少字节导致列表彼此偏移。
-
你有一个小字节数组来重现问题吗? (替换`byte[] binary1`)
-
我可以使用 .jpg 文件类型提供的最小输入仍然有 600 个字节,而且似乎仍然只是丢掉了一些字节。如果我给它一个 .txt 文件,它可以正常工作。
-
得到它已经可以用 1 个字节重现 ;) 查看答案
标签: c# file-io binary type-conversion hex