从数组中捕获字符串

Dan*_*der 1 c# arrays string

我试图找出如何从某个给定位置开始从数组中获取字符串.假设我们有一个任意长的数组,我的字符串从位置1000开始.如果我想从文件中获取一个字符串,我会简单地使用像getc或scanf之类的东西.如何在阵列而不是文件上执行这些相同的功能?

*哦,请记住,数组是int类型,并且充满了ASCII字符的数字表示.

Luk*_*keH 9

如果您正在处理byte[]数组,那么您可以这样做:

string yourString = Encoding.ASCII.GetString(yourArray, startIndex, length);
Run Code Online (Sandbox Code Playgroud)

由于你的数组是类型的int[]- 假设每个元素代表一个ASCII字符 - 你需要首先将它们转换intbytes.如果数组是"任意长",那么你可能不想将整个事物转换为byte[]数组,在这种情况下只需要转换你需要的部分:

byte[] temp =
    yourArray.Skip(startIndex).Take(length).Select(i => (byte)i).ToArray();
string yourString = Encoding.ASCII.GetString(temp);
Run Code Online (Sandbox Code Playgroud)

如果int[]数组的每个元素实际上并不代表单个ASCII字符,那么您需要向我们提供有关其使用的精确格式的更多信息.


Gre*_*ech 6

假设字符串为空终止(您没有指定如何知道字符串的结尾),那么Linq应该做一些技巧:

var chars = ints.Skip(1000).TakeWhile(i => i != 0).Select(i => (char)i);
var str = new string(chars.ToArray());
Run Code Online (Sandbox Code Playgroud)

第一个类似于跳过1000个int,在它们不是空终止符时获取它们,然后将它们转换为适合表示ASCII代码的int的char.第二行简单地将它们变成一个字符串.

如果字符串没有空终止符,并且只是在数组结束时结束,那么只需删除对它的调用TakeWhile.