C#,如何通过分隔符拆分字节数组?

4
我有一个字节数组,其中包含由','分隔的一系列2字节十六进制数。如何将它们按照','分割,然后将数字转换为整数?
该字节数组包含ASCII格式的值。
编辑: 示例
我的有效字符范围为0到9,A到F和逗号, 因此,我的流应该是这样的:
70, 67, 65, 57, 44, 55, 68, 66, 53, 44....
这将等价于十六进制
FCA9和7DB5

你能发一个例子吗? - CodesInChaos
3个回答

6

如果您的字节数组确实是ASCII编码(每个字符一个字节),则以下方法适用:

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

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


不错!这段代码的作用是什么?"Select(x => Convert.ToInt32(x,16)).ToArray();" - Kevin Boyd

2

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


你是在建议像这样的代码吗? string str = System.Text.Encoding.ASCII.GetString(buf); string [] sarr = str.Split(new char[]{','}, StringSplitOptions.RemoveEmptyEntries); int [] intarr = new int[sarr.Length]; for (int s = 0; s < sarr.Length; s++) { intarr[s] = int.Parse(sarr[s], System.Globalization.NumberStyles.AllowHexSpecifier); } - Kevin Boyd
1
和jmh_gr一样,但他快了30秒,并发布了一个例子呵呵..我用手机打字回答的。但是是的,就像那样。 - rfcdejong

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;
    }
}

我编辑了我的问题,实际上是2字节。并且格式为ASCII,因此每个数字在字节数组中将占用4个位置。我的有效范围是0到65535。 - Kevin Boyd
@KevinBoyd 好的,请检查我的最新答案。它在C语言中可以运行,我认为我的C#转换也是正确的。 - Richard J. Ross III
@richard-j-ross-iii 现在正在尝试! - Kevin Boyd
@richard-j-ross-iii:编译错误,ToInt32方法没有重载只有1个参数。 - Kevin Boyd
@KevinBoyd 没头绪。可能是字节序问题,我猜测。 - Richard J. Ross III
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接