【问题标题】:subtracting the value of a byte array from another byte array从另一个字节数组中减去一个字节数组的值
【发布时间】:2019-05-13 07:41:07
【问题描述】:

我一直试图从另一个字节数组中减去一个字节数组的值,这些值是我从文件中读取的。 我试图将数组转换为整数,然后减去最终恢复为字节数组的值。

问题是我需要从另一个字节数组中获取值并使用它从另一个字节数组中减去。

我有以下代码,

byte[] arr_i = {0x01,0x02,0x03};
byte[] arr_j = {0x04,0x05,0x06};

    int i = BitConverter.ToInt32(arr_i, 0);
    int j = BitConverter.ToInt32(arr_j, 0);
    int sub = j - i;
    byte[] sum = BitConverter.GetBytes(sub);

一旦我得到 i 变量,我就会得到错误

{"Destination array is not long enough to copy all the items in the collection. Check array index and length."}

在我看来,类型之间存在某种不匹配,但我没有找到任何没有它的例子。

谢谢

【问题讨论】:

  • 欢迎来到 Stack Overflow。如果您可以将其减少到 minimal reproducible example,这将很有帮助 - 目前涉及 很多 变量,我怀疑其中许多变量可以删除但仍会重现问题。此外,请发布准确的错误,并指出它发生的位置。
  • BitConverter.ToInt32 不会从 byte 转换为 int - 它从您传递的 byte[] 中读取四个字节并将它们解释为整数。由于您的数组只有三个字节,这将导致异常。但是为了帮助您解决问题,我们需要看到一个很好的例子来说明您正在尝试做的事情。
  • @Luaan Ops,这似乎是我的失误,我没有注意到它需要 4 个字节。我添加了另一个字节,它似乎工作。所以现在我得看看我如何改变我的原始代码来处理这个问题。谢谢!

标签: c# arrays binary


【解决方案1】:

感谢@Luaan 的评论,我把代码改成了,

byte[] arr_i = {0x01,0x02,0x03,0x04};
byte[] arr_j = {0x04,0x05,0x06,0x07};

int i = BitConverter.ToInt32(arr_i, 0);
int j = BitConverter.ToInt32(arr_j, 0);
int sub = j - i;
byte[] sum = BitConverter.GetBytes(sub);

和预期的一样,总和值为 {0x03, 0x03, 0x03, 0x03}。 BitConverter.ToInt32 需要 4 个字节才能按预期工作。

【讨论】:

  • 确保其行为符合您的要求 - 例如有溢出。 0x01020304 - 0x040506070x04050607 - 0x00060000 的结果应该是什么?如果你真的想减去两个 4 字节整数,这会很好用,但如果不是,例如您需要分别减去每个字节对。
猜你喜欢
  • 2014-02-15
  • 2013-02-21
  • 2015-06-09
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 2019-11-17
  • 1970-01-01
相关资源
最近更新 更多