【问题标题】:Convert part of List<string> to byte[]将 List<string> 的一部分转换为 byte[]
【发布时间】:2015-12-26 17:50:19
【问题描述】:
List<string> K = new List<string>();
byte[] tmp = K[i >> 3].SelectMany(s => Encoding.Default.GetBytes(s)).ToArray();

我想转换,但出现错误:

'System.Text.Encoding.GetString(byte[])' 的最佳重载方法匹配有一些无效参数

这样做的正确性如何?

【问题讨论】:

  • 您的代码和您的错误不匹配。您在示例代码中根本没有调用GetString,这让我认为您实际上并没有发布您正在运行的代码。
  • 另外,你的例子太复杂了,隐藏了真正的问题。您的K[i &gt;&gt; 3] 调用返回一个string,因此您可以通过调用myString.SelectMany(s=&gt; ,,,) 来简化它,这可能有助于您自己发现问题。
  • 你需要一个二维数组 byte[,] 而你只有一个一维数组。每个字符串都会创建一个 byte[] 并且 List 对象包含多个字符串。

标签: c# list bytearray


【解决方案1】:

我不确定您希望拨打K[i &gt;&gt; 3] 会做什么。您的标题说“转换列表的一部分”,但它所做的只是从您的List&lt;string&gt; 返回 one 字符串。

接下来,您在该字符串上调用 SelectMany()。由于stringIEnumerable&lt;char&gt;SelectMany 调用尝试在字符串中的每个char 上调用Encoding.Default.GetBytes(),并将每次调用返回的结果byte[] 返回到组合IEnumerable&lt;byte&gt; 中。这失败了,因为 Encoding.Default.GetBytes() 需要一个 string 参数,而不是 char

根据您的标题,我预计您希望K[i &gt;&gt; 3] 返回一个包含原始List&lt;string&gt; 子集的IEnumerable&lt;string&gt;。如果是这样,您的代码将有意义 - SelectMany 会将子集中的每个字符串传递给 GetBytes,这将返回一个 byte[],它将连接到一个更大的 IEnumerable&lt;byte&gt;,其中包含所有字符串的字节在子集中。但是您需要解决根本原因,即子集选择,才能使其正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-15
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 2021-01-13
    • 2011-02-15
    相关资源
    最近更新 更多