【问题标题】:The sourcearray is not long enough C#sourcearray 不够长 C#
【发布时间】:2020-05-18 10:19:10
【问题描述】:

我有以下问题: 我尝试将字节数组从我的 PC 发送到设备。可发送的最大数据为 59 字节。字节 1-4 用于对发送的包进行计数。所以每个包的总字节数是 55。

现在我得到一个错误源数组不够长,即使剩余的字节数超过 55。

有人知道我的问题是什么吗?

uint RAW_DATA_SIZE = 55;
字节[] 参数;
uint byteCount = 0;
                
FileInfo fi = new FileInfo (Path.GetFileNameWithoutExtension(args[0])+".hex");
Console.WriteLine(fi.Length); // 发送的整个 HEX 数据的大小
TotalSentBytes = Convert.ToUInt32(fi.Length); //将long转换为uint
uint dataSize = TotalSentBytes;

【问题讨论】:

  • 哪一行在这里失败了?它听起来就像是ASCII.GetBytes - 在这种情况下:content 是什么?更重要的是:为什么每次都发送相同的content?还有...感觉前 4 个字节应该取决于我们这次实际发送的内容? (这看起来像一个典型的帧长度前缀?)。您是否打算每次都发送“content 的下一个最多 55 个字节”?因为:这不是你的代码所做的

标签: c# arrays


【解决方案1】:

问题是您使用byteCount 作为Array.Copy 方法的sourceIndex 参数(请参阅Microsoft Docs 中的签名):

Array.Copy(Encoding.ASCII.GetBytes(content), 0, parameters, 
       4 * sizeof(byte), remainingBytes > RAW_DATA_SIZE ? RAW_DATA_SIZE : remainingBytes);

我已将byteCount 替换为 0,因为您想从源数组的开头复制它。

【讨论】:

    【解决方案2】:

    好的,我现在有了答案。 我使用 Fileinfo 来获取要发送的总字节数。

     FileInfo fi = new FileInfo (Path.GetFileNameWithoutExtension(args[0])+".hex");
     Console.WriteLine(fi.Length);               // Size of the whole HEX data sent
     TotalSentBytes = Convert.ToUInt32(fi.Length);   //Convert long to uint
    

    现在我通过以下方式获取保存在 .hex 文件中的字节数组的长度:

    byte[] contentOfBytes = Encoding.ASCII.GetBytes(content); //get content of hex-file
    uint dataSize = Convert.ToUInt32(contentOfBytes.Length);  //get number of elements in the bytearray
    

    现在我不再收到任何错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-02
      • 2017-12-27
      • 1970-01-01
      • 2020-12-17
      • 2012-05-08
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多