C#startIndex + length> this.length

Cha*_*les 0 c#

我正在试验一个奇怪的问题.我将大量数据(结构)编码为十六进制字符串,并作为varbin上传到服务器.然后我下载它,有时它无法解码.所以我决定编写一些打印件:

public static void d(String TAG, String message)
{
    int maxLogSize = 1000;
    for (int i = 0; i <= message.Length / maxLogSize; i++)
    {
        int start = i * maxLogSize;
        int end = (i + 1) * maxLogSize;
        if (end > message.Length - 1)
            end = message.Length - 1;
        //end = end > message.Count() ? message.Count() : end;
        print(message.Substring(start, end));
        print("start: " + start.ToString() + " end: " + end.ToString() + " size: " + message.Length);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在服务器响应协程的try/catch中我得到了这个:

11-03 15:03:02.616 13103-13117/com.Mindfunk.minus I/Unity: start: 63000 end: 64000 size: 127834

(Filename: ./artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 37)
11-03 15:03:02.636 13103-13117/com.Mindfunk.minus I/Unity: There was an error decoding this challenge replay . Maybe it is corrupted.
System.ArgumentOutOfRangeException: startIndex + length > this.length
Parameter name: length
    at System.String.Substring (Int32 startIndex, Int32 length) [0x00000] in <filename unknown>:0 
    at DBConnection+Log.d (System.String TAG, System.String message) [0x00000] in <filename unknown>:0 
    at DBConnection+<DownloadChallengeReplay>c__IteratorE.MoveNext () [0x00000] in <filename unknown>:0 
Run Code Online (Sandbox Code Playgroud)

我不知道为什么它不能读取一半的字符串,只考虑大小,因为没有那么大的数据集它就像一个魅力.

log2(64000)大约是16.我假设C#字符串的最大长度是16位但是很惊讶!我发现它是32位.思考string.substringstring.length完全不相关的方法,但为什么?

daz*_*sed 8

开始:63000结束:64000

 message.Substring(start, end)
Run Code Online (Sandbox Code Playgroud)

Substring的第二个参数是要提取的字符串的长度.您告诉它从位置63000开始并检索接下来的64000个字符.