|
질문했는데, 답변이 없으면 넘 답답하잖아요... 제가 많이 아는건 아니라서...
그냥 참고삼아 읽어주세요~
시리얼 통신을 할 때 hex 0x20이하의 값들은 캐릭터로 표현하기 어렵기때문에
'\x06'방법으로 보냅니다. \06은... 스트링인지 캐릭터인지 판단이 잘 안되지만
질문을 읽어보면 0x06h값(1byte)이 맞는것 같습니다.
\06 0002 XXXX 0000 DDDD \R\N
---- ------
hex 0x06(???) 이건 조금 특이하게 사용되는건데, hex 0x0d,0x0a와 동일한 표현입니다.
님께서...
" '\06'6[0x06],'0'48[0x30]이렇게 표시돼는데 []안에 들어있는값은 먼가여" 물으셨는데,
[]안의 값은 hex(헥사값) 맞습니다.
또 님께서 10진으로 바꾸는 방법에 대해 물으셨는데...
사용 용도에 따라 10진으로 바꿔쓰는것이 좋습니다.
위의 데이터를 버퍼에(예- char buf[20+1],buf1[4+1]) 저장한다면 아래의 형태로 저장이 되며
(스트링 형태로 받아들여도 스트링을 캐릭터처럼 처리가 가능하기때문에 처리하는 방법은 비슷합니다.)
buf[0] buf[1] ] buf[2] buf[3] buf[4] ..... buf[15] .....
0x06 '0'(0x30) '0'(0x30) '0'(0x30) '0'(0x32) 'D'(0x44) ....
만일 "0002"라는 데이터만 10진으로 바꾸고 싶으면 그 데이터를 다른버퍼에 copy해서
atoi()함수를 이용하면 되구요...
strncpy(buf1,&buf[1],4);
int i = aoti(buf1);
*다른버퍼에 copy하는 이유는 대부분의 함수에서는 null값을 check하여 처리하기 때문입니다.
XXXX값을 받고싶으면 위와 비슷한 형태로
strncpy(buf1,&buf[5],4);해서 buf1의 값을 이용하시면 되구요.
도움이 되셨으면 좋겠네요~~ ^^
chac1_초보 님이 쓰신 글 :
: 프로그램 한지 일주일 조금 지난 초보입니다.
:
: cport 통신중에 궁금한게 있어서 글을 씁니다.
:
: ㅟ그램을 실행하면 DEBUG INSPECTOR 에서보면
: \06 0002 XXXX 0000 DDDD \R\N 이런형식으로 데이터가 들어 옵니다...[공백을 넣은것은 보기편하라고 넣은 것임]
: 거기서 데이터를 보면 '\06'6[0x06],'0'48[0x30]이렇게 표시돼는데 []안에 들어있는값은 먼가여 아스키코드 값인가여 (음 아스키코드표를 보니 아스키 값은 아닌듯 그냥 16진수 인가...)
:
: 여기서 중요한 질문 위데이터에서 보면 XXXX와 DDDD부분은 데이터 값이 변합니다..
: 현재 필요한 부분은 XXXX값인대 가변이 안되는 부분은 이렇게 표시 해서 잘랐습니다..
:
: ComDataPacket1->StartString.printf("%c", 0x0630303032);// 앞데이터 자르기
: ComDataPacket1->StopString.printf("%c", 0x0D0A); // 뒷 데이터 자르기
:
: 이렇게 표시하는 것이 옳게 표시된 것인지 궁금하구여
: 이렇게하면 데이터가 XXXX 0000 DDDD이렇게 표시가 되는대 가변되는 부분은 어떻게 짤라야 하나여 문자를 상수로 변경후 FFFF 0000 0000로 & 마스크 하면 되는 건가여 그럼 데이터가 필요 한 부분만 원상태로 남을거 같은대그다음에 다시뒷데이터를 자르면 될것두 같은대 안되는 군여(코드를 짤수거 없내여). 아니면 간단하게 하는 방법아신다면 알려주십시요..
:
: 정리
: 질문
: 1. 들어오는 데이터의 형식
: 2. 데이터의 원하는 부분을 간추리 방법의 옳음 과 간단한 방법이 있는지.
: 3. 위 데이터를 10진형태의 데이터를 표시 할라면 어뗗게 해야 하는지
: (만약 방법들이 있다면 소스도좀 적어주십시여)
: 고수 님들의 많은 답변을 기다립니다..
|