C# 无法将字符追加到字符串上,但只能使用一种方法
C# Failing to append a character onto a string, but only in one method
我正在编写 PLC 和 Unity3d 模拟器之间的 TCP 解决方案。我遇到了最令人困惑的问题,只是附加了一个“;”到我发送到 PLC 的字符串的末尾。
这是我的代码:
public void extractSpeed(string PLCSpeed) { //coneverts the socket message to belt speed and assigns it to belt
if (!isRollers) {
Int32.TryParse(beltScript.convID, out int j);
if (j < 10) {
convID = "0"+beltScript.convID;
}
if (j >= 10) {
convID = beltScript.convID;
}
}
if (isRollers) {
Int32.TryParse(rollerScript.convID, out int j);
if (j < 10) {
convID = "0"+rollerScript.convID;
}
if (j >= 10) {
convID = rollerScript.convID;
}
}
if (PLCSpeed.StartsWith("B"+convID)) {
string finalPLCSpeed = PLCSpeed.Substring(4, 4);
finalSpeed=float.Parse(finalPLCSpeed);
//finalSpeed=finalSpeed;
start = true;
Debug.Log("Extracted Speed to Belt "+convID+": "+finalSpeed);
testString = PLCSpeed;
testString += ";";
Debug.Log("TestString: "+testString);
socket.sendData(testString);
return;
}else { //catch invalid message
//Debug.Log("Failed to extract speed!");
return;
}
}
如您所见,
testString = PLCSpeed;
testString += ";";
Debug.Log("TestString: "+testString);
socket.sendData(testString);
return;
是我尝试附加“;”的地方到字符串。当我记录该值时,我得到了没有“;”的原始字符串。当我将值发送到 PLC 时,我将原始字符串作为一条消息和仅包含“;”的第二条消息。其他方法工作正常,发送正常。只是这个方法,即使我在套接字脚本的 sendData 方法中附加消息,所有消息都会得到 ';'除了从此方法发送的数据。我也可以在一条消息中发送更长的字符串,所以我不认为这是由于缓冲区长度或其他原因造成的。最奇怪的部分是我记录了我通过 sendData 发送的每条消息,但它不记录发送“;”,但我在 PLC 上将其作为单独的消息接收。
请记住,PLCSpeed 标签中的数据始终是 B+ID+Speed。例如:B010300.
我添加了';'当我将这个字符串发送到 Unity 时,在 PLC 内部的字符串上,然后一旦我设置了速度,我将它发送回 PLC 进行验证。当我放置 ';'在 PLC 中它工作正常,但我仍然无法将任何字符串附加到 PLCSpeed 的末尾。就好像它被标记为常量,但事实并非如此。
好吧,感谢@AlexeiLevenkov,我弄明白了。
PLC 正在发送 \0 x 256。这是因为我的缓冲区是 256 字节。我看不到它们,因为 C# 将它们作为空格或其他东西处理。使用 String.Replace 我能够在视觉上检测到它们。
日志:
"Data:B010150;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
好了。 PLC 是做任何事情的噩梦,而套接字是最极端的噩梦。
感谢您的帮助!
我正在编写 PLC 和 Unity3d 模拟器之间的 TCP 解决方案。我遇到了最令人困惑的问题,只是附加了一个“;”到我发送到 PLC 的字符串的末尾。
这是我的代码:
public void extractSpeed(string PLCSpeed) { //coneverts the socket message to belt speed and assigns it to belt
if (!isRollers) {
Int32.TryParse(beltScript.convID, out int j);
if (j < 10) {
convID = "0"+beltScript.convID;
}
if (j >= 10) {
convID = beltScript.convID;
}
}
if (isRollers) {
Int32.TryParse(rollerScript.convID, out int j);
if (j < 10) {
convID = "0"+rollerScript.convID;
}
if (j >= 10) {
convID = rollerScript.convID;
}
}
if (PLCSpeed.StartsWith("B"+convID)) {
string finalPLCSpeed = PLCSpeed.Substring(4, 4);
finalSpeed=float.Parse(finalPLCSpeed);
//finalSpeed=finalSpeed;
start = true;
Debug.Log("Extracted Speed to Belt "+convID+": "+finalSpeed);
testString = PLCSpeed;
testString += ";";
Debug.Log("TestString: "+testString);
socket.sendData(testString);
return;
}else { //catch invalid message
//Debug.Log("Failed to extract speed!");
return;
}
}
如您所见,
testString = PLCSpeed;
testString += ";";
Debug.Log("TestString: "+testString);
socket.sendData(testString);
return;
是我尝试附加“;”的地方到字符串。当我记录该值时,我得到了没有“;”的原始字符串。当我将值发送到 PLC 时,我将原始字符串作为一条消息和仅包含“;”的第二条消息。其他方法工作正常,发送正常。只是这个方法,即使我在套接字脚本的 sendData 方法中附加消息,所有消息都会得到 ';'除了从此方法发送的数据。我也可以在一条消息中发送更长的字符串,所以我不认为这是由于缓冲区长度或其他原因造成的。最奇怪的部分是我记录了我通过 sendData 发送的每条消息,但它不记录发送“;”,但我在 PLC 上将其作为单独的消息接收。
请记住,PLCSpeed 标签中的数据始终是 B+ID+Speed。例如:B010300.
我添加了';'当我将这个字符串发送到 Unity 时,在 PLC 内部的字符串上,然后一旦我设置了速度,我将它发送回 PLC 进行验证。当我放置 ';'在 PLC 中它工作正常,但我仍然无法将任何字符串附加到 PLCSpeed 的末尾。就好像它被标记为常量,但事实并非如此。
好吧,感谢@AlexeiLevenkov,我弄明白了。
PLC 正在发送 \0 x 256。这是因为我的缓冲区是 256 字节。我看不到它们,因为 C# 将它们作为空格或其他东西处理。使用 String.Replace 我能够在视觉上检测到它们。
日志:
"Data:B010150;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
好了。 PLC 是做任何事情的噩梦,而套接字是最极端的噩梦。
感谢您的帮助!