我正在试验一个奇怪的问题.我将大量数据(结构)编码为十六进制字符串,并作为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.substring和string.length完全不相关的方法,但为什么?
开始:63000结束:64000
message.Substring(start, end)
Run Code Online (Sandbox Code Playgroud)
Substring的第二个参数是要提取的字符串的长度.您告诉它从位置63000开始并检索接下来的64000个字符.