제가 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 로 나와야 하는데 어떻게 처리해야 하는지 방법좀 알려주세요
그리고 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비트 프로세스까지 왔는데도 그 상태 그대로)
를 감수하는 거죠