【问题标题】:Convert byte array to ushort array in C# .Net Microframework在 C# .Net Microframework 中将字节数组转换为 ushort 数组
【发布时间】:2013-12-26 16:39:41
【问题描述】:

我需要将字节数组转换为 UInt16 (ushort) 数组。我可以从字节数组到 UInt32 数组。

我已经看过this SO question。但我不能使用 BitConverter 或引用问题中给出的解决方案。

我也提到了这些问题: THISTHIS

这是我迄今为止尝试过的。

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] );
}

【问题讨论】:

  • 您尝试过编译器建议的类型转换吗?即:data[objIndex] = (ushort) (((ushort)(byteArray[objIndex * sizeof(UInt16) + 0]) &lt;&lt; 8) + byteArray[objIndex + 1]; )
  • 请不要编辑您的问题,而是将解决方案发布为 aswer。
  • 是的,我试过了,还是不行。但是我能够使编译器错误消失。现在我必须测试它是否有效。

标签: c# .net-micro-framework


【解决方案1】:

查看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)。我收到消息“名称缓冲区在当前上下文中不存在”。
【解决方案2】:

最后结果证明这是一个非常简单的修复(现在感觉很傻)。在将我使用的每个数字转换为 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] );
}

【讨论】:

    猜你喜欢
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    相关资源
    最近更新 更多