Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Си => Паскаль


Страницы:   1 2

kernel ©   (2008-07-24 11:11:00) 

Доброго времени суток. Не могу перевести простой Си`шный код на Паскаль :'(
Если кто может, помогите, пожалуйста, перевести на Pascal следующее:

unsigned char *sccBuffer = (unsigned char *) BADDR;
где-то в .h файле увидел
unsigned char BADDR[512];
Пишу на "нашем" языке так:
sccBuffer: ^Byte;
Но что делать с куском = (unsigned char *) BADDR;не понимаю.
Далее,
struct direntry {
unsigned char deName[8];
#define   SLOT_EMPTY       0x00
....
}

Пишу так:
type = record // а может быть надо packed record?!
 deName: array [8] of Byte;

Но что делать с #define SLOT_EMPTY 0x00? Не писать же в record
const SLOT_EMPTY = $00;?!
И чем отличается
typedef struct{...}TChtoNibud;
от
struct ChtoNibud {...};
Какие будут отличия, если перевести это на Паскаль?

ЗЫ: извиняюсь, если ветку создал где-то не там


kernel   (2008-07-24 15:19:00) [21]

Спасибо еще раз :)

А почему direntry = packed record ? Как определить просто "record" или "packed record"?


Игорь Шевченко   (2008-07-24 14:59:00) [22]


>  sccBuffer := PBYTE(BADDR);


Тогда еще проще

sccBuffer := @BADDR


clickmaker   (2008-07-24 13:02:00) [23]

> sccBuffer - это же 1 байт

вообще-то это 4 байта - указатель


kernel   (2008-07-24 12:56:00) [24]

Бррр.. Что-то я запутался :)

sccBuffer := PBYTE(BADDR);

sccBuffer - это же 1 байт, а BADDR - это 512 байт.
Ведь 512 байт нельзя же присвоить 1 байту?!


Игорь Шевченко   (2008-07-24 12:34:00) [25]


> А если PBYTE нет, можно написать так:


PBYTE есть.

Если нет, то
type
 PByte = ^Byte;


kernel   (2008-07-24 12:28:00) [26]

Спасибо большое.

> Игорь Шевченко ©   (24.07.08 11:27) [2]

А если PBYTE нет, можно написать так:

var
sccBuffer: ^BYTE;
...
sccBuffer := ^BYTE(BADDR);
...


?


Игорь Шевченко   (2008-07-24 11:27:00) [27]


> unsigned char *sccBuffer = (unsigned char *) BADDR;
> где-то в .h файле увидел
> unsigned char BADDR[512];
> Пишу на "нашем" языке так:
> sccBuffer: ^Byte;
> Но что делать с куском = (unsigned char *) BADDR; не понимаю.
>
> Далее,
> struct direntry {
> unsigned char deName[8];
> #define   SLOT_EMPTY       0x00
> ....
> }
> Пишу так:
> type = record // а может быть надо packed record?!
>  deName: array [8] of Byte;
> Но что делать с #define SLOT_EMPTY 0x00? Не писать же в
> record
> const SLOT_EMPTY = $00;?!


var
 sccBuffer: PBYTE;
...
 sccBuffer := PBYTE(BADDR);
...

> struct direntry {
> unsigned char deName[8];
> #define   SLOT_EMPTY       0x00
> ....
> }

const
 SLOT_EMPTY = 0;

type
 direntry = packed record
   deName: array[0..7] of Byte;
 ...
 end;


МистерТ   (2008-07-24 11:24:00) [28]

по поводу "чистого си", не уверен, т.к. учил только уже приплюснутую версию, да и судя по коду программист сам был "еще тот", но рискну предположить:
> unsigned char BADDR[512];
> unsigned char *sccBuffer = (unsigned char *) BADDR;

PBaddr = ^TBaddr;
TBaddr = array[0..511] of Byte;
...
BADDR     : TBaddr;
sccBuffer : PBaddr;
...
sccBuffer := @BADDR;

> struct direntry {
> unsigned char deName[8];
> #define   SLOT_EMPTY       0x00
> ....
> }

const
 SLOT_EMPTY = 0;
type
 TDirEntry = record
   deName : array[0..7] of Byte;
   ...
 end;

> И чем отличается
> typedef struct{...}TChtoNibud;
> от
> struct ChtoNibud {...};
> Какие будут отличия, если перевести это на Паскаль?

При переводе на паскаль - это равнозначные конструкции...
а так, первый вариант - plain-c, второй - более С++


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо