我正在尝试从内存映射文件中读取数据,该文件从C ++程序写入内存文件。我能够使用debug方法并将数据作为循环中的字符串写入。但是,我想将字节数组转换为可以操作的可用字符串。
using (MemoryMappedFile mmf = MemoryMappedFile.OpenExisting("DataFile"))
{
using (MemoryMappedViewAccessor reader = mmf.CreateViewAccessor())
{
var bytes = new byte[reader.Capacity];
reader.ReadArray<byte>(0, bytes, 0, bytes.Length);
for(int i = 0; i<bytes.Length; i++)
{
System.Diagnostics.Debug.Write((char) bytes[i]);
}
}
}
我尝试删除for循环并将其替换为GetString()编码器,但它只返回一个问号字符而不是完整的数据字符串。
答案 0 :(得分:3)
只要您知道编写字节的编码很容易,您就可以使用例如System.Text.UTF8Encoding类(可能是System.Text.Encoding.UTF8实例)和GetString方法:
string str = System.Text.Encoding.UTF8.GetString(bytes, 0, bytes.Length);
如果您不知道编码这会变得更难,您将不得不尝试使用启发式方法并猜测编码实际上是什么。