【发布时间】:2014-09-10 07:42:04
【问题描述】:
我尝试将数组从byte[] 转换为sbyte[]。
这是我的示例数组:
byte[] unsigned = { 0x00, 0xFF, 0x1F, 0x8F, 0x80 };
我已经试过了:
sbyte[] signed = (sbyte[])((Array)unsigned);
但它不起作用。此操作后数组中没有值。
有人有更好的主意吗?
【问题讨论】:
-
这段代码的工作原理是它可以编译并且不会引发错误。它生成的数组几乎在所有情况下都可以用作
sbyte[],但运行时仍将其标记为byte[]。不确定“数组中没有值”是什么意思,对我来说,数组是{0, -1, 31, -113, -128},正如预期的那样。 -
编译后签名数组中没有值。 Visual Studio 显示“?”在有符号数组的每个元素中。
-
好的,我尝试从签名数组中获取一个元素,它仍然有效。谢谢你的帮助。我尝试使用此解决方案。
-
那么这是 VS 的限制。 VS 可能不理解静态类型
sbyte[]但动态类型byte[]的数组是有效的。 CLR 允许这种转换,但 C# 不允许。这是一个 hack,因此在大多数应用程序中,您需要使用 @Selman 的建议。 -
只是调试器无法显示它,因为它实际上是
sbyte[]对byte[]的引用。
标签: c# type-conversion