我需要处理二进制资源(二进制文件的内容)。该文件包含短裤。我无法想象如何将访问该资源的结果转换为短数组:
short[] indexTable = Properties.Resources.IndexTable;
不起作用;我只能用
byte[] indexTable = Properties.Resources.IndexTable;
使用Array.Copy
将无效,因为它会将通过访问资源返回的数组中的每个字节转换为short。
如何解决此问题(手动转换字节数组除外)?有没有办法告诉C#资源是short[]
类型而不是byte[]
?
我甚至尝试编辑项目的resx文件并将资源的数据类型更改为System.UInt16,但后来我收到了错误消息,现在可以为它们找到构造函数。
使用VS 2010 Express和.NET 4.0。
答案 0 :(得分:4)
你应该使用BinaryReader:
using (var reader = new BinaryReader(new MemoryStream(Properties.Resources.IndexTable)))
{
var firstValue = reader.ReadInt16();
...
}
答案 1 :(得分:4)
Buffer.BlockCopy()
byte[] srcTable = Properties.Resources.IndexTable;
short[] destTable = new short[srcTable.Length / 2];
Buffer.BlockCopy(srcTable, 0, destTable, 0, srcTable.Length);
答案 2 :(得分:0)
如果你更喜欢“自己动手”的风格(不过,我个人更喜欢@Joel Rondeau的方法)
byte[] bytes = Properties.Resources.IndexTable;
short[] shorts = new short[bytes.Length/2];
for( int i = 0; i < bytes.Length; i += 2 )
{
// the order of these depends on your endianess
// big
shorts[i/2] = (short)(( bytes[i] << 8 ) | (bytes[i+1] ));
// little
// shorts[i/2] = (short)(( bytes[i+1] << 8 ) | (bytes[i] ));
}