我正在尝试一个奇怪的问题。我将大量数据(一个struct)编码为十六进制字符串,并以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);
}
}
然后在服务器响应协程的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
我不知道为什么在字符串的一半之后不能读取,只考虑大小,因为没有那么多数据集,它就像一个魅力。
log2(64000)大约为16。我假设C#字符串的最大长度为16位,但令人惊讶!我发现它是32位。考虑string.substring
并且string.length
根本不考虑相关方法,但是为什么呢?
开始:63000结束:64000
message.Substring(start, end)
Substring的第二个参数是要提取的字符串的长度。您告诉它从位置63000开始并检索下一个64000字符。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句