【问题标题】:C#, How to split a byte array by delimiter?C#,如何通过分隔符拆分字节数组?
【发布时间】:2012-03-15 18:59:22
【问题描述】:

我有一个字节数组,其中包含由 ',' 分隔的 2 字节十六进制数字的集合。怎么能被','分割,然后把数字转换成整数呢?

字节数组包含 ascii 格式的值。

编辑: 示例

我的有效字符范围是 0 到 9 ,A 到 F 和逗号 所以我的流应该看起来像

70、67、65、57、44、55、68、66、53、44....

这相当于十六进制

FCA9 和 7DB5

【问题讨论】:

  • 你能举个例子吗?

标签: c# split bytearray delimiter


【解决方案1】:

这应该可以,虽然我的 C# 有点生锈...

byte[]    input = { 1, 0, 0, 0, ',', 10, 15, ',', 100, 0, 0, 0, ',' };
List<int> output = new List<int>();

int lastIndex = 0;

for (int i = 0; i < input.Length; i ++) {
    if (input[i] == ',')
    {
         if (i - lastIndex == 4)
         {
             byte[] tmp = { input[i - 4], input[i - 3], input[i - 2], input[i - 1] };
             output.Add(BitConverter.ToInt32(tmp, 0));
         }

         lastIndex = i + 1;
    }
}

【讨论】:

  • 实际上我是通过读取串口来获取字节数组的。所以我可能有不规则的输入。是否可以先用逗号分割数组,然后检查每个的长度是否为 4
  • 我编辑了我的问题,它实际上是 2 个字节。并且格式为 ascii,因此每个数字将在字节数组中占据 4 个位置。我的有效范围是 0 到 65535
  • @KevinBoyd 好的,请查看我最近的回答。它适用于我,我认为我的 C# 转换是正确的。
  • @richard-j-ross-iii 立即尝试!
  • @richard-j-ross-iii:编译错误,方法 'ToInt32' 没有重载需要 1 个参数
【解决方案2】:

如果您的字节数组是真正的 ASCII 编码(每个字符一个字节),那么以下内容将起作用:

int[] ints = Encoding.ASCII.GetString(asciiEncodedBytes).Split(',')
             .Select(x => Convert.ToInt32(x,16)).ToArray();

这也将处理混合大小写和可变长度的十六进制数字。

【讨论】:

【解决方案3】:

我会将字节数组转换为字符串,然后使用 String.Split(',')

【讨论】:

  • 您是否建议类似这样的字符串 str = System.Text.Encoding.ASCII.GetString(buf);字符串 [] sarr = str.Split(new char[]{','}, StringSplitOptions.RemoveEmptyEntries); int [] intarr = new int[sarr.Length]; for (int s = 0; s
  • 与 jmh_gr 相同,但他快了 30 秒并发布了一个示例,呵呵.. 我用手机输入了答案。但是是的,类似的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-05
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
  • 2013-03-03
  • 1970-01-01
相关资源
最近更新 更多