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 是做任何事情的噩梦,而套接字是最极端的噩梦。

感谢您的帮助!