...C++ /는 IPC, 시리얼, 이더넷, 같은 통신 인터페이스를 통해 문자열을 보내는 때 프로그래머 치료 문자열 종단을 수행하는 방법
가 법적 단지 문자열 종료를 유지하는 것입니다 페이로드에 Qt를 문자열 Terminaton 따라서 페이로드 버퍼 내에 여러 문자열을 추가하면됩니까?
또는 통신 인터페이스를 통해 문자열 종료를 보내지 않는다고 말하는 규칙이 있습니까?
감사
...C++ /는 IPC, 시리얼, 이더넷, 같은 통신 인터페이스를 통해 문자열을 보내는 때 프로그래머 치료 문자열 종단을 수행하는 방법
가 법적 단지 문자열 종료를 유지하는 것입니다 페이로드에 Qt를 문자열 Terminaton 따라서 페이로드 버퍼 내에 여러 문자열을 추가하면됩니까?
또는 통신 인터페이스를 통해 문자열 종료를 보내지 않는다고 말하는 규칙이 있습니까?
감사
당신은 당신이 그것에 대해 생각대로의 형태로 이러한 프로토콜을 통해 "문자열"를 전송하지 않습니다. 원본 바이트를 텍스트 또는 이진 형식으로 보냅니다. Qt 용어로 QByteArray 또는 QDataStream으로 생각하십시오.
"IO"의 기본 클래스 인 Qt 프레임 워크에서 QIODevice 클래스의 클래스를 찾을 수 있습니다. 그런 다음 QtCore의이 기본 클래스는 QtSerialPort, QtBluetooth, QtNetwork 및 이와 유사한 모듈과 같은 하위 클래스에서 다시 구현됩니다.
일반적으로 귀하의 질문은 프로토콜 지향, 즉 프로토콜 디자인과 조금 더 비슷합니다. 텍스트 데이터이거나 일반적으로 길이 필드가있을 수있는 경우 대개 종료 문자가 있습니다. 종료 문자는 데이터에 따라 다를 수도 있으므로 \0
이 아닙니다.
예를 들어 우리가 사용하는 프로토콜은 때때로 '\ n'이고 때로는 ';'입니다. 그리고 무엇하지. 그것은 당신에게 달려 있지만, 전용 종료 문자를 사용하면 실제로 유효하며 광범위하게 사용됩니다.
당연히 길이 필드 만 이진 모드로 전송 될 때 적용될 수 있습니다.
프로토콜은 혼자서 구현되었다. 다중 문자열 송신을 지원해야한다. 한 문자열이 끝나고 다른 문자가 시작될 때를 알기 위해서 마커처럼 s/t가 필요합니다. 이것은 NULL 일 수 있습니다. QByteArray는 종료 문자를 제거합니까 아니면 원시 바이트로 변환합니까? – binaryguy
NULL이 문자가 아닙니다. 그것은 C/C++입니다. 실제로 그것은 0 (숫자)이고, 이것이 의미하는 것이면 '\ 0'이 아닙니다. QByteArray는 이름에서 알 수 있듯이 바이트 배열이므로 바이트를 그대로 해석합니다. 따라서 '\ 0'을 유지합니다. 그러나 다시, 그것은 NULL이 아닙니다. 사실, 일부 컴파일러에서 NULL은 C++ 11의 새로운 nullptr로 구현되었는데, 기이하게도 이상하지도 않습니다. – lpapp
Sry, 내 잘못, 나는 NUL을 의미했다. 그러나 QByteArray 그것을 유지하고 인터페이스를 통해 주어진 원시 바이트 보내고 수신기가이 문자열을 문자열의 길이를 결정하기 위해 NUL을 사용할 수있는 알고있는 경우? – binaryguy
모든 인터페이스를 통한 통신은 정의 된 프로토콜에 따라 이루어져야합니다. 문자열 종료 규칙이있는 경우 프로토콜에 의해 정의됩니다. 기존 프로토콜을 통해 통신하지 않는 경우 프로토콜 (예 : 사용자 정의 프로토콜)을 정의해야합니다. 여기서 문자열을 종료하는 방법과 끝내는 방법을 정의합니다.
물론 모든 바이트는 원시 바이트입니다. 그럼에도 불구하고 원시 바이트가 NULL을 나타낼 때 내 종료 문자라고 말할 수 있습니다. 한 문자열이 끝나고 다른 버퍼가 버퍼 내에서 시작될 때를 결정하려면 s/t가 필요합니다. – binaryguy
바이너리 데이터가 아닌 경우 '\ 0'을 종료해도 문제가 없습니다. 밖에 자주 사용됩니다. 심지어 나는 그것을 꽤 많이 사용했다. 그러니 걱정 마세요, 괜찮습니다. :-) – lpapp
감사합니다. 나는 그것을 줄 것이다 – binaryguy