음 델을 시작한지 삼사일 정도된 초보입니다.
c로 프로그래밍을 해봐서 그 소스를 가지고 놀고 있는데요. 제가 저수준 연산을 많이 해야 하걸랑요. 비트 연산자는 문제가 없는데 포인터가 문제가 있더군요. 다르더라고요.
흑흑 뭔놈의 언어들이 이렇게 많고 다른지. 누가 자바에서 델까지 그리고 저수준언어까지 되는 툴 안만드나? 거 만들면 전세계프로그래머들 다 한강에 모아놓고 이거만 쓰겠다는 서약 받고 안 그러면 손가락하나 헌납하고....얼쑤 좋다!!!!....
^&^ 농담이 길어졌군요 그럼 본론으로 들어가겠습니다.
c에서
int *i;
short *s;
s = (short *)(i + 1);
해주면 i 변수의 처음 2바이트는 무시하고 거기서부터 short의 값으로 읽어와서 이 놈을 파스칼로 하려고했는디.
i : ^Integer;
s : ^Smallint;
s^ := short((i + 4)^);
하문 안되더군요. 음 아마 *(i + 4) 이런 연산을 파스칼에서는 지원하지 않나요?
이거 뭐 깔끔한 수가 없을까요?
그리고 이거는 어떻게 파스칼로 고쳐야하지요?
char *data;
int buffer[3];
buffer[0] = (BYTE)(*(WORD *)(data + 1));
파스칼의, 델의 고수를 기다리며 글을 올립니다.
도스용 C프로그래밍(Turbo C, ...)소스로 공부하신다면 약간 위험할 수 있습니다.
윈도우 환경에서는 메모리 영역을 함부로 건드리지 못하니까요. 이렇게 포인터를
남발하는것은 좋은 프로그래밍 습관이 아닙니다. 자신만이 쓰는 것이라면 별 상관이
없겠지만 다른 사람이 봤을때 그 내용을 이해하기가 힘들게 됩니다. 또 시일이 한참
지난후에 소스를 변경해야 할때는 자신조차도 이 소스가 뭔지 이해할 수 없는 경우도
생깁니다. 암튼 아래와 같이 코딩하세요.
> int *i;
> short *s;
>
> s = (short *)(i + 1);
var
i: ^Integer;
s: ^Smallint;
begin
// ......
S := SmallInt(Pointer(Integer(I)+1));
end;
> char *data;
> int buffer[3];
>
> buffer[0] = (BYTE)(*(WORD *)(data + 1));
var
data: ^Char;
buffer: array[0..2] of integer;
begin
// ......
buffer[0] := Byte(PWord(Pointer(Integer(Data) + 1))^);
end;
^^ 항상 즐코하세요.
진성열 wrote:
> 음 델을 시작한지 삼사일 정도된 초보입니다.
> c로 프로그래밍을 해봐서 그 소스를 가지고 놀고 있는데요. 제가 저수준 연산을 많이 해야 하걸랑요. 비트 연산자는 문제가 없는데 포인터가 문제가 있더군요. 다르더라고요.
> 흑흑 뭔놈의 언어들이 이렇게 많고 다른지. 누가 자바에서 델까지 그리고 저수준언어까지 되는 툴 안만드나? 거 만들면 전세계프로그래머들 다 한강에 모아놓고 이거만 쓰겠다는 서약 받고 안 그러면 손가락하나 헌납하고....얼쑤 좋다!!!!....
> ^&^ 농담이 길어졌군요 그럼 본론으로 들어가겠습니다.
>
> c에서
>
> int *i;
> short *s;
>
> s = (short *)(i + 1);
>
> 해주면 i 변수의 처음 2바이트는 무시하고 거기서부터 short의 값으로 읽어와서 이 놈을 파스칼로 하려고했는디.
>
> i : ^Integer;
> s : ^Smallint;
>
> s^ := short((i + 4)^);
>
> 하문 안되더군요. 음 아마 *(i + 4) 이런 연산을 파스칼에서는 지원하지 않나요?
>
> 이거 뭐 깔끔한 수가 없을까요?
>
> 그리고 이거는 어떻게 파스칼로 고쳐야하지요?
>
> char *data;
> int buffer[3];
>
> buffer[0] = (BYTE)(*(WORD *)(data + 1));
>
> 파스칼의, 델의 고수를 기다리며 글을 올립니다.
>