Q&A

  • char 배열의 숫자값 처리하기
제가 C 프로그램에서 작성한 데이타를 델파이에서 읽어 들여 DB에 저장하려고 하는 문제가 있어 질문 합니다.

FStr : array [0..30008] of char;  // LOG FILE RECORD SIZE

LOG FILE을 읽어서 FStr 배열에 넣고 data 크기 많큼 자료를 변수에 저장하는데
문자는 잘 되는데 숫자는 원하는 값이 나오지 않네요 아래의 내용을 보시고 어떻게 하는지 조언 부탁드립니다.

소스 자료의 숫자는 int(4byte) short(2byte) 로 구성된 것으로 처리함(VAX 서버)

참고로 디버깅시 FStr배령의 자료내용은 아래와 같습니다.
FStr=('7', '0', '0', #1, #206, #0, '1', '7', '0', '1', ' ' ' ' ' '  ' ' ' ' ' ' #196, #14, #0, #0, ' ' ' ' ' ' ' ' ' ' ' ' ' ' #0, #0, #0, #0, '2', '1', #0, #0, #0  ...................................)

자료읽기는 char(3), char(1), short, char(4), char(3), char(3), short, short, char(3), char(3) int, short, short, char(2) 로 하고 문자는 그냥 자료크기로 읽고 숫자는 ORD()함수 사용하여 처리
이렇게 읽으면('700', '1', 206, '1701', '', '', 196, 0, '', '', 0, 50, 0, '0')으로 처리됨

여기서 문제는 196이 숫자 18900 로 나와야 하는데 어떻게 처리해야 하는지 방법좀 알려주세요

2  COMMENTS
  • Profile
    이중철 2005.11.01 19:48
    C로 작성되었다는 것이 혹시 VAX에서 작성된 것 아닌가요?

    그리고 VAX에서 나온 결과물(LOG)를 PC에서 처리하는 것이 아닌가요?

    만약 그렇다면 문제는 VAX와 Intel호환CPU와의 자료처리구조(레지스터)에 따른것입니다.

    Intel 칩은 과거 Z80, 8086, 8088칩과 호환(XT에서 만들어진 프로그램을 즉, MS O/S 기반위에 만들어진)

    하기 위하여 Integer자료처리가 역순으로 되어 있습니다.

    즉 자료는 $01 05 이렇게 들어 있다고 하면 Intel Cpu에서는 $05 01로 인식합니다.

    Intel계열에서 인식하기 위해서는 Word, longWord들의 자료를 역순으로 배치시켜야

    제대로 인식하게 됩니다.

    Swap이라는 함수가 그 역할을 하는것으로 압니다.

    일반적인 CPU는 순방향으로 되어 있는데 일부 CPU(인텔은 역순, 그리고 특정 다른 CPU는 워드단위 역순)

    뭐 이런식 일수 있으므로 VAX가 어떤 CPU를 쓰는가 확인하고 어떤식으로 INTEGER를 처리하는 지 확인하는

    것이 순서 이겠습니다.

    저기 Swap은 순방향만 지원될거에요

    참고로 우리가 많이 사용하고 있는 TCP 통신이나 JPEG 구조나 대부분의 공식 구조는 모두 순방향 입니다.

    인디소켓 프로그램 내부를 좀 보시면 Word나 longWord를 바꾸어주는 부문이 많이 있습니다.

    우리가 인텔호환칩을 사용하는 죄로 해당 Overload(결국 64비트 프로세스까지 왔는데도 그 상태 그대로)

    를 감수하는 거죠

  • Profile
    천희택 2005.11.02 01:11



    htons, htonl, ntohs, ntohl 함수를 사용하시면 됩니다. uses WinSock or WinSock2하시면

    될겁니다.

    Host Byte Order, Little-Endian, 인텔 계열, DEC 계열 CPU 와

    Network Byte Order, Big-Endian, IBM, 대부분의 RISC가 사용하는 방식.