Q&A

  • 통신길이 체크부분에서 코드가 이해가 안가서요.
패킷구조 : stx + Lo(lenght) + Hi(Length) + addr + cmd + etx + crc

Recvbuff : #$02#$08#$00#$00#$04#$03#$00#$00

이렇게 8 바이트 패킷이 있는데 #$08#$00 이 리틀인디언이고 이게 0008 해서 8이란 길이가 나온다네요.

그런데 그 길이를 가져오려면 datalen := Word((@recvbuff[2])^) 이렇게 주면 datalen 에 8 이 입력되고요.

그런데 이번에 패킷이 다 똑같은데 길이부분이 바뀌었거든요.

패킷구조 : stx + Hi(lenght) + Lo(Length) + addr + cmd + etx + crc

Recvbuff : #$02#$00#$08#$00#$04#$03#$00#$00

이렇게 길이가 #$00#$08 이렇게 바뀌었는데 이거는 datalen := Word((@recvbuff[2])^)  이런 방법으로 길이를 가져오는 방법이 있나요?


3  COMMENTS
  • Profile
    권태훈 2005.05.02 22:17
    윈속 포함하시고

    datalen := ntohs(Word((@recvbuff[2])^));

    하시면 됩니다.


  • Profile
    김홍균 2005.05.02 22:27
    여기 저기 물어보니 swap 이게 바꿔주는거라 하더군요.

    ntohs 대신 swap 써도 같은 값 나오던데 두개가 같은 기능을 하는 건가요?

    도대체 이런거 어디 물어볼데도 없고 죄송한데 다시 한번 더 질문드립니다.

  • Profile
    이중철 2005.05.03 02:45

    swap이란 Function이 있었군요
    결론적으로는 두개다가 같아요 하는일이..
    저는 몰라서 다 만들어서 썼는데 ^^
    먼저 원인부터 말씀드리겠습니다.

    Intel CPU가 과거 8080에서 출발하였다는 것은 알고 계시죠
    이후 Z80, 8086, 8088로 진화 합니다.
    그런데 이때 Z80이나 8080은 8BIT CPU입니다.
    그런데 당시 Z80으로 개발되어진 S/W 가 많이 있었지요
    이것을 수정없이 사용하고자 8088을 디자인할때만 처리순서를 역순으로 가져가는
    체계로 갑니다.
    처리순서 역순이란 레지스트(AX, AH, AL)에서 처리순서 ^^
    또한 다시 80286, 80386, 80486으로 갈때도 역시나 하위버전 호한 문제로
    계속 이문제를 안고 CPU를 디자인 합니다.

    예로
    var A : word;
    A := 1;
    이러면 실제적으로 2바이트중 첫번째 바이트에 1이 있고 두번째 바이트에는 0 이 들어가죠

    그런데 대부분의 공식적 패킷이나 구조체(GIF, JPECG 등등..)에서는
    순서가 바로 되어 있습니다.
    즉, 워드 1 이라면 00 01 이런식으로 들어가 있죠

    또한 대부분의 타 CPU들은 순서가 바로 되어 있습니다.(AMD는 인텔 호환칩이 꺼꾸로..)

    결국 타시스템 호환이나 통신을 할때는 순서가 바로해서 통신하는게 원칙입니다.

    ntohs나 swap은 모두 같은 기능을 하는것이고

    특히 ntohs는 네트워크 통신에서는 패킷해더들이 순서가 바로 되어 있으니 아예 Function으로
    제공하는 것이고(Winsock은 해당 함수가 다있음)
    swap은 델파이에서 특별히 제공하는 것 같네요

    역사적으로 보면 이런 부문이 많이 있어요
    과거 DOS에서 WINDOW로 갈때도 이와 비슷하게 처리되었어요
    원래 64K밖에 메모리관리가 안되는것을 HIMEM, 확장메모리, 확대메모리등으로 변칙 확장 사용하고
    이것을 끝까지 지원 되었죠 WIN95까지요 WIN98에서는 일부 지원 안되었던걸로 기억

    • 박진규
    • 2005.05.04 06:49
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 도끼로이마까
      2005.05.04 19:47
      TDateTime 형을 쓰시구욤 등록하실때는 DateToStr로 등록하셨다가 다시 TDateTime으로 바꾸실때는 StrToD...
    • 석주현
      2005.05.04 18:47
      그냥 현재 시각에서 더하는 것을 예로 들면요. 헬프를 찾아 보시면 알지만 시간은 Double 형입니다. 결...
    • Runo
      2005.05.04 00:22
      ADO를 패치해야 하는걸로 알구 있구요.... 일단 임시적인 방법으로는 AdoQuery Properties의 LockType을...
    • 민스맘
      2005.05.03 19:06
        with query1 do begin   SQL.clear;   SQL.Add(' update name ...
    • 구자형
      2005.05.03 19:52
    • 손군
    • 2005.05.03 07:47
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 정찬희
      2005.05.03 21:47
      가끔씩 쓰는 방법입니다만... <!--CodeS--> type   TControlAccess = class(TContro...
    • 도끼로이마까
      2005.05.03 18:33
      TControl내에 선언된 Color property는 protected 입니다. TForm의 경우도 마찬가지입니다..TControl로 ...
    • 엄마미안
      2010.01.29 23:02
      2005년 그시절엔 내가 이런 질문을 했었군.. 참.... 그당시는 많이 몰랐네요.
    • 송인화
    • 2005.05.03 03:19
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 도끼로이마까
      2005.05.03 18:39
      웹 서버에 스크립트를 작성하셔야 할 듯합니다. 파일 이름을 인자로받구요... 웹 루트부터 파일과 디렉...
    • 김성진
      2005.05.03 05:05
      제가 생각하기에는 쉬운 방법은 이렇습니다. 1. ftp나 telnet등을 사용하셔서 파일리스트를 가져온다 2. ...
    • nilriri™
      2005.05.03 03:49
      레포트를 작성하실때 빈 폼을 만드시고 퀵레포트 컴포넌트를 올려 놓으시고 작업을 하신듯 하네요 ...
    • D
    • 2005.05.02 22:56
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 주웰
    • 2005.05.02 22:30
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 도끼로이마까
      2005.05.03 00:25
      <!--CodeS--> {$WARNINGS OFF} FileSetAttr('AAA.TXT', faHidden); {$WARNINGS ON} <!--CodeE...
    • 주웰
      2005.05.03 02:34
      우선 답변 감사 드립니다. 참고로 결백증 절대 아닙니당...^^;; 잘때 항상 뭐 묻은 강아지랑 껴안고 자는...
    • 최용일
      2005.05.03 22:06
      안녕하세요. 최용일입니다. 아마 델파이 6이나 7을 쓰시는것 같은데... Kylix때문에 생긴 경고이구요...
    • 김홍균
    • 2005.05.02 21:51
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 권태훈
      2005.05.02 22:17
      윈속 포함하시고 datalen := ntohs(Word((@recvbuff[2])^)); 하시면 됩니다.
    • 김홍균
      2005.05.02 22:27
      여기 저기 물어보니 swap 이게 바꿔주는거라 하더군요. ntohs 대신 swap 써도 같은 값 나오던데 두개가 ...
    • 이중철
      2005.05.03 02:45
      swap이란 Function이 있었군요 결론적으로는 두개다가 같아요 하는일이.. 저는 몰라서 다 만들어서 썼...
    • 소대봉
    • 2005.05.02 20:40
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이준희
      2005.05.02 23:02
      interface uses Windows; function getSystemFolder():string; var   SysDir: array[0.....
    • 강인규
      2005.05.02 21:00
      <!--CodeS--> const   MAX_PATH = 255; var   dir: array [0..MAX_PATH] ...
    • 박진규
    • 2005.05.02 20:16
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 강인규
      2005.05.02 21:08
      구현하는것은 큰 문제가 아니나 부동소수점 연산에서 문제가 발생할 것으로 보여집니다. 아래의 코드를 ...
    • 도끼로이마까
      2005.05.03 18:16
      시리얼 포트 프로그래밍에 관련된 문서입니다. 이것을 먼저 공부하시는게 좋을듯 싶습니다... http:/...
    • 조수석
    • 2005.05.02 07:00
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 착한천사
      2005.05.03 00:00
      우와.. OS(Operating System)를 만들어보실려고 하시는군요.. 그건 굉장히 힘들고, 어려운 작업입니다.. ...
    • 조수석
      2005.05.04 03:25
      굉장히 어렵네요...! ..아무튼 상세한 답변 너무 감사드립니다. 감사합니다.
    • 양소영
    • 2005.05.02 06:39
    • 1 COMMENTS
    • /
    • 0 LIKES
    • nilriri™
      2005.05.03 01:02
      용도가 뭔가요? -1,-2를 인덱스로 가질때 무슨 작업을 하실려구 그런 인덱스값이 필요하신건지? 함수...
    • 세라핌
      2005.05.02 02:33
      istool이라는 프로그램사용하시면 쉽게 됩니다. http://www.istool.org InnoSetup 스크립트를 편하...
    • 화니
      2005.05.02 02:36
      파일하나를 나누는 겁니다. 이쪽에서는 1부터 1000byte까지 저쪽은 1001부터 2000까지 이런식으로요 ...
    • 주선종
    • 2005.05.01 19:47
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 도끼로이마까
      2005.05.03 18:44
      새창을 막을려는 이유를 설명해 주세요.. 델파이는 VCL 자체가 thread safe가 아니기 때문에 thread ...
    • 주선종
      2005.05.03 22:02
      답변주셔서 감사합니다. 새창을 막으려는 이유는 특별한 이유가 있는게 아니라 ActiveX기능에 새창을...
    • 최동열
    • 2005.05.01 00:16
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 착한천사
      2005.05.02 00:42
      결론적으로 그게 가능할까요? RDBMS에서 권한이 없는데, 어떻게든지 사용하게끔 한다? 이것은 해킹하겠다...
    • nilriri™
      2005.05.01 09:19
      자신이 만든 테이블에 대한 권한이 없다?? RDBMS의 사용자 권한 설정에 문제가 있는거 아닐까요? DBA...