【问题标题】:Combine one Byte[] to Single Array将一个 Byte[] 合并为单个数组
【发布时间】:2012-12-18 09:19:10
【问题描述】:

我确实有一个包含一系列数字的字节数组...

t 阻止而不是其余的!

我怎样才能拥有Temp[] 中的所有第 4-8 块?

【问题讨论】:

  • 你的意思是你有 4 个字节一起组成了一个 int?
  • 是的,我有 4 个字节,在 Temp 中我也需要 4 个字节,但我使用它的方法只返回第 1 个字节并跳过其余部分,如何在我的 Temp 中返回所有 4 个字节?
  • CMD 假设是 [493131] 但现在它的第一个字节只有 49 个
  • 第一个或最后一个字节最重要?
  • BlockCopy 是正确的,因为我已经测试过唯一的问题是这个块副本必须读取 3 个字节并将它们存储在一个名为 Temp[] 的数组中

标签: c# arrays buffer readblock


【解决方案1】:

元素 4-8(或实际上是索引 3-7)是 5 个字节。不是 4.
您混淆了源偏移量和计数:

Buffer.BlockCopy(bResponse, 3, temp, 0, 5);

现在 temp 将包含 [23232]

如果你想要最后 4 个字节,那么使用这个:

Buffer.BlockCopy(bResponse, 4, temp, 0, 4);

现在 temp 将包含 [3232]
要将其转换为 int:

if (BitConverter.IsLittleEndian)
  Array.Reverse(temp);

int i = BitConverter.ToInt32(temp, 0);

编辑:(在您评论后[43323232] 实际上是{43, 32, 32, 32}

var firstByte = temp[0];   // This is 43
var secondByte = temp[1];  // This is 32
var thirdByte = temp[2];   // 32
var fourthByte = temp[3];  // 32

如果您想将其转换为 int,那么上面的 BitConverter 示例仍然有效。

【讨论】:

  • 这不是答案!这一个它只从缓冲区中获取 3 个块你想如何将这 3 个分配给一个 Temp[]?
  • 每一个都必须单独阅读,并使用您的方法在 Temp 中背靠背排序,不过只能读取 4 个字节。我没有问题阅读问题是在另一个我调用 Temp[] 的数组中分配这个 4
  • @Artinos:您对读取的字节数有误。如果您阅读 Buffer.BlockCopy 的 MSDN 页面,您会发现是您混淆了 source offsetcount 参数。
  • 你对数字的看法是对的 我打字不好...但是我仍然无法将 3 字节块放入一个名为 Temp[] 的块中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-16
  • 2015-09-28
  • 2012-08-02
  • 1970-01-01
  • 1970-01-01
  • 2012-11-19
相关资源
最近更新 更多