パスカルに変換するには?


ペナルティー  2005-09-24 23:09:26  No: 17687

タイトルどうりですが、
C++Builderのソースを見ながら
パスカルに変換して動かそうとしています。

//----------------------------------------
void CGetID::GetId( char *gid )
{
  DWORD id0;
  char *id = gid;

  //  中略
  for (int i=0; i<4; i++){
    *id++ = (char)((id0 >> (i*8)) & 0xff);
  }
}
//----------------------------------------

これってパスカルではどうなるのでしょうか?
特に「*」について教えてください。

途中までなら・・

void CComCom::GetId( char *gid )
→procedure CComCom::GetId( gid: PChar );
でいいのかな?

char *id = gid;
→*id := gid^;

*id++ = (char)((id0 >> (i*8)) & 0xff);
→*id := *id + char(id0 shr (i * 8) and $ff);

う〜む、もう一息?
理解不能・・


a  2005-09-25 00:03:57  No: 17688

×→procedure CComCom::GetId( gid: PChar );
→procedure CComCom.GetId(gid: PChar);

*id++ =
を省略しないで  書いてみること
間違いにきずくはず。

id[i]で  i番目のchar型がとれるはず 
計算するには  byteなどに変換。

*id++ がしたいのなら
ポインターを数字としては扱わないので型変換。
integer を確保して 代入
addr  // @
integer()
を使えばできます
integer(@id)
でポインターアドレスを数字に変換

ポインターに戻すには
Ptr(integer(@id))


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加