System.FillCharの第3引数についてご教授ください。
http://docwiki.embarcadero.com/Libraries/Sydney/ja/System.FillChar
を参照すると、第3引数は「Value: Ordinal」と記述されておりますが、
Ordinalという型は何をusesすれば使用できるようになるのでしょうか。
お手数ですがご教授頂ければと思います。
ヘルプには
Value は Byte 型または AnsiChar 型 とあります。
procedure TForm1.Button1Click(Sender: TObject);
var ast:AnsiString;
len:integer;
begin
setlength(ast,10);
len:=Length(ast);
FillChar(ast[1],len,AnsiChar('a'));
ShowMessage(ast);
end;
procedure TForm1.Button2Click(Sender: TObject);
var b:TBytes;
len:integer;
begin
setlength(b,10);
len:=Length(b);
FillChar(b[0],len,0);
ShowMessage(IntToStr(b[9]));
end;
ご参考まで、私はTBytes等を0に初期化する場合はZeroMemoryを使うことが多いです。
procedure TForm1.Button3Click(Sender: TObject);
var b:TBytes;
begin
setlength(b,10);
ZeroMemory(@b[0],length(b));
end;
mamさん、ご回答ありがとうございます。
私はFillChar()の処理を以下のように変えたいと考えておりました。
******************
procedure FillCharEx(var X; Count: Integer; Value: Ordinal)
begin
if ( Count < 64 ) then begin
FillCharFast( X, Count, Value );
end else begin
System.FillChar( X, Count, Value );
end;
end;
******************
そこで第3引数をどのように記述すればコンパイルが通るのか知りたかったのです。
以上、Ordinalについてもう少し情報を頂けると幸いです。
上記のFillCharのdocwikiにあるとおり、FillCharは組み込みルーチンです(コンパイラマジックとかプリミティブとも呼ばれることがあります)。
http://docwiki.embarcadero.com/RADStudio/Sydney/ja/Delphi_%E7%B5%84%E3%81%BF%E8%BE%BC%E3%81%BF%E3%83%AB%E3%83%BC%E3%83%81%E3%83%B3
これらの関数は基本的にコンパイラレベルで処理されているため、同様の処理を作ることはできませんが、
> Value は Byte 型または AnsiChar 型
とあるので、
procedure FillCharEx(var X; Count: Integer; Value: Byte); overload;
procedure FillCharEx(var X; Count: Integer; Value: AnsiChar); overload;
とオーバロードを2つ用意すればいいように思います。
参考にしてください。
> Ordinalという型は何をusesすれば使用できるようになるのでしょうか。
> 以上、Ordinalについてもう少し情報を頂けると幸いです。
組み込みルーチンの説明のレスがあるので余計なお世話で不要かとは思いますが,
Ordinal は組み込みルーチン内だけで使用されている「型名」でしょう.
どのユニットにも定義はありません.つまり使用できません.
同じ組み込みルーチンの Ord 関数の引数も Ordinal です.
Ord は Ordinal の略でしよう.おそらく.
英語圏の方であればそのままですが,Ordinal の意味は順序値 (または順序型) です.
ただし,FillChar の第 3 引数は 1 バイト ( $0 ~ $FF),
Ord 関数の引数は 2 バイト ( $0 ~ $FFFF - Delphi 2007 以前では 1 バイト) です.
順序型なので文字も使用できます.
FillChar の第 3 引数には 65 も $41 も #$41 も AnsiChar('A') も使用できます
[ 単純型(Delphi) - RAD Studio - 順序型 ]
http://docwiki.embarcadero.com/RADStudio/Sydney/ja/%E5%8D%98%E7%B4%94%E5%9E%8B%EF%BC%88Delphi%EF%BC%89#.E9.A0.86.E5.BA.8F.E5.9E.8B
http://docwiki.embarcadero.com/RADStudio/Sydney/en/Simple_Types_(Delphi)#Ordinal_Types
お返事が遅くなり申し訳ありません。
皆様ご回答ありがとうございました。
非常に勉強になりました。
ツイート | ![]() |