首页 > 解决方案 > C# BitConverter.ToInt64 - 目标数组不够长

问题描述

执行以下 C# 代码时遇到问题

byte[] addr = new byte[IntPtr.Size];
IntPtr conv = (IntPtr)(BitConverter.ToInt64(addr, 0));

我得到的错误是:

System.ArgumentException: Destination array is not long enough to copy all the items in the collection. Check array index and length.
   at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
   at System.BitConverter.ToInt64(Byte[] value, Int32 startIndex)

我仍然是 C# 的菜鸟,所以边走边学……你知道我在这里缺少什么吗?我知道目标数组似乎存在问题,但不确定为什么......任何指导都非常感谢。

标签: c#

解决方案


这里的潜在错误是数组长 4 个字节,要读取 Int64 需要读取 8 个字节。

奇怪的是,您收到有关目标数组的错误。您调用的方法不应该将任何内容复制到任何数组,那么为什么要谈论目的地呢?

源中的错误消息使用由 id 标识错误的机制,在本例中为 Arg_ArrayPlusOffTooSmall

使用这样的 id 似乎是合理的,因为 id 的名称与错误匹配。

但是,Arg_ArrayPlusOffTooSmall的大多数用途是当数组用作写入的目标而不是读取的源时,因此通过添加在这种情况下不正确的详细信息错误地使错误消息更“有用”。

恭喜,您在 .net 中发现了一个错误!


推荐阅读