在C#.Net Microframework中将字节数组转换为ushort数组

Sar*_*api 5 c# .net-micro-framework

我需要将字节数组转换为UInt16(ushort)数组.我能够从字节数组到UInt32数组.

我已经看过这个问题了.但我不能使用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.
}
Run Code Online (Sandbox Code Playgroud)

请告诉我这里缺少的东西.

编辑:我能够在将每个数字转换为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] );
}
Run Code Online (Sandbox Code Playgroud)

poy*_*poy 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);
Run Code Online (Sandbox Code Playgroud)


Sar*_*api 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] );
}
Run Code Online (Sandbox Code Playgroud)

或这个。

for (ushort objIndex = 0; objIndex < data.Length; ++objIndex)
{
    data[objIndex] = (ushort)((byteArray[objIndex * sizeof(UInt16)] << 8) +
                                                 byteArray[objIndex + 1] );
}
Run Code Online (Sandbox Code Playgroud)