2010-04-27 2 views
2

이진 파일 구조로 작업하고 있습니다. 데이터를 읽는 코드 예제는 C로되어 있으며 Delphi에서 읽어야합니다. 나는 C 프로그래밍 경험이 없다고 덧붙였다.C 포인터 코드 예제를 Delphi 포인터 구문으로 변환

감안할 때 나는 다음과 같은 어려움을 겪고 비트는 이것이다

typedef struct { 
uchar ID, DataSource; 
ushort ChecksumOffset; 
uchar Spare, NDataTypes; 
ushort Offset [256]; 
} HeaderType; 

... 

typedef struct { 
ushort ID; 
... 
ushort DistanceToBin1Middle,TransmitLength; 
} FixLeaderType; 

... 

HeaderType *HdrPtr; 
FixLeaderType *FLdrPtr; 

unsigned char RcvBuff[8192]; 
void DecodeBBensemble(void) 
{ 
unsigned short i, *IDptr, ID; 
FLdrPtr = (FixLeaderType *)&RcvBuff [ HdrPtr->Offset[0] ]; 
if (FLdrPtr->NBins > 128) 
FLdrPtr->NBins = 32; 

... 

다음 나는 [ HdrPtr->Offset[0] ]; 첫 번째 오프셋 배열 항목의 값에서 반환 될 수 이해 작은에서

FLdrPtr = (FixLeaderType *)&RcvBuff [ HdrPtr->Offset[0] ]; 

HdrPtr에 의해 가리키는 HeaderType 구조체? 그래서 HdrPtr^.Offset[0]에 해당합니까?

그런 다음 &RcvBuff [ HdrPtr->Offset[0] ];은 인덱싱 된 RcvBuff 배열 항목의 값을 포함하는 메모리 주소를 반환해야하므로 @RecBuff[HdrPtr^.Offset[0]]과 동일합니까?

그럼 나는 (FixLeaderType *)..과 함께 길을 잃습니다. 누군가 FldrPtr에 의해 참조되는 내용을 정확히 설명해 주실 수 있습니까?

답변

4

FixLeaderType *FLdrPtr; 
unsigned char RcvBuff[8192]; 

FLdrPtr = (FixLeaderType *)&RcvBuff [ HdrPtr->Offset[0] ]; 
  1. FldPtr이 유형 인 관련이있는 코드의 비트 FixLeaderType * 또는 FixLeaderType에 대한 포인터
  2. RcvBuffchar의 배열입니다.
  3. HdrPtr->Offset[0]은 마이크로 초 단위 값으로 변환되므로 RcvBuff [ HdrPtr->Offset[0] ]char 값을 산출합니다.
  4. &char 값을 가져 오는 대신 값의 주소가 반환됨을 의미합니다. 이는 char * 유형임을 의미합니다.
  5. FldPtrchar * 유형을 잘못 입력했습니다. (FixLeaderType *)은 유형이 유효하도록 변환합니다. 이것을 캐스트 조작이라고합니다.
+0

고마워요! 유형 변환 작업은 제가 누락 된 부분이었습니다. 그것은 내가 계속할 수있을만큼 충분히 지워줍니다. 건배. – HMcG

3

내가 반드시 읽어야 할 생각 것과 같은 :

것들을 많이하게
* = pointer to 

& = address of 

쉽게

+0

+1 매우 명확한 설명 –