お世話になってます。
ヤマダです。
インラインアセンブラを使って
function atoi(value:string):integer;
例
'100'が入力されたら100を出力する
を実装しています。
この場合valueの文字列長をしるには、どうすればよいでしょうか?
Cだと\0終端なので問題ないですが…
delphiのstringは、一バイト目に文字列長を保持するという
記述をみたのですがCPUデバッガで確認しても見つかりませんでした。
ご教授いただけるとうれしいです!
宜しくお願いします。
一バイト目に文字列長というのは少しだけあってます。
正確には-3byte - 0byteの4バイトみたいです。
c,c++でも終端0は未保障です。
Delphiの終端0も未保障ですが普通にStringを使っていれば勝手に入ります。
ちなみにやる気を削ぐようでなんですが、
InttoStrはアセンブラ実装ですよ(D2009)
確認コード。
procedure TForm1.Button1Click(Sender: TObject);
var
b:pbyte;
str:AnsiString;
i:Integer;
begin
str := 'test';
b := @str[1];
Dec(b,4);
for i := 0 to Length(str) + 4 do
begin
ListBox1.Items.Add(IntToHex(Integer(b),8) + ' ' +
' str[' + IntToStr(i-3) + ']' + ' ' +
'Byte=' + IntToStr(b^) + ' ' +
'Code=' + Char(b^));
inc(b);
end;
end;
>ちなみにやる気を削ぐようでなんですが、
>InttoStrはアセンブラ実装ですよ(D2009)
function atoi(value:string):integer;
だからStrToInt じゃないか?
StrToInt もアセンブラだけど
うほっ
レスありがとうございました!
早速調べてみます!
ツイート | ![]() |