2016-07-21 2 views
0

먼저 무엇을합니까 :어떻게 스트림 (문자열)을 평가할 수 있습니까?

9 비트 프로토콜로 비동기 직렬 버스를 스니핑하고 데이터를 PC로 전송합니다. PC 측에서는 데이터를 끝이없는 문자열로받습니다. 그 모양은 .12_80E886.02_80E894.13입니다. PC 측 소프트웨어는 C#으로 winforms로 작성됩니다. 이제 스트림 예제에서 볼 수있는 명확한 시작이 없다는 문제가 있습니다. 그 이유는 프로토콜의 어딘가에서 스 니프를 시작하기 때문입니다. 내가 startindex = IndexOf("_")을 사용하고, 새로운 시작으로 지금을 설정할 수 있습니다 생각

을 :

내가 뭘 원하는지. 스트림이 생성되는 스트림에서 부호를 평가해야합니다 : _ (밀리 초 단위의 시간 소인) (addressbyte databyte). RichTextBox에 표시하고자하는 것은 databyte 뿐이지 만 타임 스탬프에 대한 데이터 관리 방법이 필요합니다. GUI에서 두 개 이상의 databyte의 시간을 볼 수 있기 때문에 SQL 데이터베이스를 만들 수 있다고 생각합니다. 주소 바이트는 특수 collor의 주소로 하나의 바이트로 collor해야합니다.

질문 : 교대 타임 스탬프, addressbyte 단일 문자열로 databyte보다를 가질 수 있도록

가 어떻게 스트림을 평가할 수 있습니까?

내가 원하는 이유는 내가하고 싶은 것을 모두 실현하기 위해 elseif 차단을 사용하면 쉽게 할 수 있다고 생각합니다.

누군가 내 프로젝트에 대해 더 좋은 의견을 갖고 있으면 댓글로 작성합니다.

친절한 소원과 함께 스니피

답변

0

두 가지 문제를 동시에 해결하려고합니다. 그들을 분리하고 개별적으로 해결하는 것이 더 낫습니다.

  1. 스트림을 사용하고 있기 때문에 데이터를 전송하는 문제가 있습니다. 이것이 유효한 해결책입니다. 스트림을 통해 데이터 (비트)를 송수신하고 있습니다.

  2. 이러한 비트를 수신 한 후에 실제 개체 (날짜, 문자열 등)로 변환하는 데 문제가 있습니다. 이를 위해서는 간단한 파서, 토큰 라이저, 데이터에서 올바른 부분을 가져 와서 변환 할 수있는 로컬 스크립트를 사용하거나 DataContracts와 같은 직렬화 프레임 워크를 사용할 수 있습니다.

간단한 데이터가있는 경우 데이터를 구문 분석 할 수있는 단일 메서드를 사용합니다. 더 복잡한 시나리오의 경우 직렬화를 살펴볼 것입니다.

또한 비트를 보내는 신뢰할 수있는 (손상되지 않은) 소프트웨어가 있다고 가정 할 수 없으므로 입력 내용의 유효성을 검사해야합니다.

0

나는 문자열이 나쁜 선택이라고 생각합니다. 적절히 데이터는 바이트로 전송됩니다. 문자열보다는 오히려 바이트를 냄새 맡기. 데이터를 이해하려면 프로토콜 설명이 필요합니다. 바이트를 버스에서 읽고 해석해야합니다.

+0

문제는 내가 바이트로 보낼 때 명확한 시작을 설정할 수 없다는 것입니다. 내 스타트 인이 바이트로 올 때가 있기 때문에 타임 스탬프의 일부이거나 시작점이라고 말할 수는 없습니다.나는 이미 시험해 봤지만 명확한 시작을 설정하는 방법을 찾지 못했고 당신에게 확실성을 안다. – sniffi

+0

안녕하세요? – BWA

+0

아니요. 실제로 제 업무는 창에서 수신하고 보여줄뿐입니다. 그러나 2 바이트 사이의 시간을 요청할 수 있어야하며 9 번째 주소 비트와 함께 바이트를 콜로 로트해야합니다. – sniffi

관련 문제