我有一系列短裤:
short[] data;
我有一个将字节写入文件的函数:
void Write(byte[] data);
我无法控制此功能,也无法更改它。有没有一种方法可以编写我的短裤数组,而无需先制作冗余副本以将其转换为字节?
像这样的东西:Write((byte[])data);
我不关心字节顺序。我希望将 Shorts 的内存表示形式写入文件,无论 Shorts 的机器表示形式是什么。我知道这种类型转换不能用于任何包含引用的非 POD 类型,但短裤应该可以完美转换。转换应该产生一个指向相同内存的两倍大小的字节数组。
如果这在 C# 中是不可能的,那么 CLR 中是否有任何东西使得这不可能,或者只是 C# 的限制?
我不关心字节顺序。我希望将 Shorts 的内存表示形式写入文件,无论 Shorts 的机器表示形式是什么。
这是第一个不可能的事情 - 字节序改变了内存表示,因此从数组中第一个 Short 的地址开始读取连续字节地址将导致不同的字节模式,具体取决于机器字节序。
第二个不可能的事情是 CLR 中的数组具有与数据一起编码的类型和长度信息。您不能更改此标头信息,否则会破坏垃圾收集器。所以给定一个short[]
数组,不能将其转换为byte[]
大批。你可能会得到一个byte
使用 C++ clr 或不安全代码的指针,但仍然无法访问 CLR 数组。
如果您确实无法控制采用字节数组的代码,您也许可以更改操作短裤的代码。用一个MemoryStream
在字节数组上将允许您读取和写入数据,您可以将数组包装为IList<short>
,或者您可以只创建访问器扩展函数来获取短裤数据。
public sealed class ShortList :IList<short>
{
private readonly byte[] _array;
public short this[int index]
{
get { return (short)_array[index/2]<<8 | _array[index/2+1] ; }
}
public int Count
{
get { return _array.Length/2; }
}
... many more methods in IList
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)