我有以下代码:
using (BinaryReader br = new BinaryReader(
File.Open(FILE_PATH, FileMode.Open, FileAccess.ReadWrite)))
{
int pos = 0;
int length = (int) br.BaseStream.Length;
while (pos < length)
{
b[pos] = br.ReadByte();
pos++;
}
pos = 0;
while (pos < length)
{
Console.WriteLine(Convert.ToString(b[pos]));
pos++;
}
}
FILE_PATH 是一个常量字符串,包含正在读取的二进制文件的路径。
二进制文件是整数和字符的混合。
每个整数为 1 个字节,每个字符以 2 个字节写入文件。
例如,该文件具有以下数据:
1你好,你好吗45你看起来棒极了//等等
请注意:每个整数都与其后面的字符串相关联。因此 1 与“HELLO HOW ARE YOU”相关,45 与“YOU ARE LOOKING GREAT”相关,依此类推。
现在二进制文件已写入(我不知道为什么,但我必须忍受这一点),使得“1”仅占用 1 个字节,而“H”(和其他字符)各占用 2 个字节。
所以这是该文件实际包含的内容:
0100480045..等等
详细情况如下:
01 是整数 1 的第一个字节
0048 是 'H' 的 2 个字节(H 是十六进制的 48)
0045 是 'E' 的 2 个字节 (E = 0x45)
等等..
我希望我的控制台从此文件中打印人类可读的格式:我希望它打印“1 HELLO HOW ARE YOU”,然后“45 YOU ARE LOOKING GREAT”等等......
我正在做的事情正确吗?有更简单/有效的方法吗?
我的行 Console.WriteLine(Convert.ToString(b[pos]));只是打印整数值而不是我想要的实际字符。文件中的整数是可以的,但是如何读出字符呢?
任何帮助将非常感激。
谢谢
我想你正在寻找的是编码.GetString.
由于您的字符串数据由 2 个字节字符组成,因此如何获取字符串是:
for (int i = 0; i < b.Length; i++)
{
byte curByte = b[i];
// Assuming that the first byte of a 2-byte character sequence will be 0
if (curByte != 0)
{
// This is a 1 byte number
Console.WriteLine(Convert.ToString(curByte));
}
else
{
// This is a 2 byte character. Print it out.
Console.WriteLine(Encoding.Unicode.GetString(b, i, 2));
// We consumed the next character as well, no need to deal with it
// in the next round of the loop.
i++;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)