在C# .Net Microframework中,如何将字节数组转换为无符号short整型数组?

5
我需要将一个字节数组转换成UInt16(ushort)数组。我已经能够从字节数组转换为UInt32数组。
我已经查看了这个SO问题。但我不能使用BitConverter或参考问题中给出的解决方案。
我还参考了这些问题: 这个这个
这是我到目前为止尝试过的。
for (uint objIndex = 0; objIndex < data.Length; ++objIndex)
{
   data[objIndex] = (Convert.ToUInt16(byteArray[objIndex * sizeof(UInt16) + 0].ToString()) << 8) 
                               + byteArray[objIndex * sizeof(UInt16) + 1]; 
   // Error - Cannot implicitly convert type 'int' to 'ushort'. An explicit conversion exists.

   data[objIndex] = ((ushort)(byteArray[objIndex * sizeof(UInt16) + 0]) << 8)
                               + byteArray[objIndex + 1]; 
   // Error - Cannot implicitly convert type 'int' to 'ushort'. An explicit conversion exists.
}

请告诉我这里缺少什么。

编辑: 在将每个数字转换为ushort后,我成功修复了它,如下所示。

for (ushort objIndex = 0; objIndex < data.Length; ++objIndex)
{
     ushort length = sizeof(UInt16);
     data[objIndex] = (ushort)( (ushort)(byteArray[objIndex * length] << (ushort)8) +
                                                 byteArray[objIndex + 1] );
}

2
你尝试过编译器建议的强制转换吗?例如:data[objIndex] = (ushort) (((ushort)(byteArray[objIndex * sizeof(UInt16) + 0]) << 8) + byteArray[objIndex + 1]; ) - gturri
请不要编辑您的问题,而是将解决方案作为答案发布。 - Ondrej Tucny
是的,我尝试过了,但不起作用。但是我已经成功消除了编译器错误。现在我需要测试它是否有效。 - Sarvavyapi
2个回答

6

请查看Buffer.BlockCopy()。您可以使用该函数将内容(byte[])转换为不同的格式(UInt16[])。

示例:

var input = byte[1024];
var output = ushort[1024 / 2]; // every ushort is 2 bytes

Buffer.BlockCopy(input, 0, output, 0, 1024);

谢谢。但是我没有Buffer.BlockCopy()函数(尽管我已经添加了mscorlib.dll)。我收到了“名称Buffer在当前上下文中不存在”的错误信息。 - Sarvavyapi

1
最终结果证明这是一个非常简单的修复(现在感觉有些傻)。如下所示,我能够通过将我使用的每个数字强制转换为ushort来消除编译器错误。
for (ushort objIndex = 0; objIndex < data.Length; ++objIndex)
{
    ushort length = sizeof(UInt16);
    data[objIndex] = (ushort)( (ushort)(byteArray[objIndex * length] << (ushort)8) +
                                             byteArray[objIndex + 1] );
}

或者这个。
for (ushort objIndex = 0; objIndex < data.Length; ++objIndex)
{
    data[objIndex] = (ushort)((byteArray[objIndex * sizeof(UInt16)] << 8) +
                                                 byteArray[objIndex + 1] );
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接