求 String 轉換至 PChar 的函數(50分)

  • 主题发起人 主题发起人 jiichen
  • 开始时间 开始时间
J

jiichen

Unregistered / Unconfirmed
GUEST, unregistred user!
之前有用過一個 Delphi 內建的函數,可將 string 轉換成 pchar

依稀記得函數用法為
function xxxxxx(const s:string):pchar;



ps: 不要使用 pchar(s) 的轉換方式! 也不要自己寫的函數,雖然這動作很簡單,
但就是生氣自己的記憶力,沒辦法,花錢買回。
 
function StrPCopy(Dest:pchar;const Source:string):PChar;
 
to 小李飞刀之lxh: 我記得不是,用法沒這麼麻煩。
 
不麻烦吧?
将一string copy 到一pchar 变量中而已。
 
s:string;
pchar(s)
ok
 
有什么函数吗?!好像只要
var s:string;
t:pchar;
begin
s:='sdfdsf';
t:=pchar(s);
end;
 
function StrLCopy(Dest: PChar
const Source: PChar
MaxLen: Cardinal): PChar
assembler;
asm
PUSH EDI
PUSH ESI
PUSH EBX
MOV ESI,EAX
MOV EDI,EDX
MOV EBX,ECX
XOR AL,AL
TEST ECX,ECX
JZ @@1
REPNE SCASB
JNE @@1
INC ECX
@@1: SUB EBX,ECX
MOV EDI,ESI
MOV ESI,EDX
MOV EDX,EDI
MOV ECX,EBX
SHR ECX,2
REP MOVSD
MOV ECX,EBX
AND ECX,3
REP MOVSB
STOSB
MOV EAX,EDX
POP EBX
POP ESI
POP EDI
end;

function StrPCopy(Dest: PChar
const Source: string): PChar;
begin
Result := StrLCopy(Dest, PChar(Source), Length(Source));
end;
 
肯定是pchar()
 
function StrPas(const Str: PChar): string;
我是正确的
 
为什么不PChar?真是自找麻烦
 
不知大家在讨论什么?
 
嗯!看來沒人用過.....
 
直接用Pchar就行了
 
StrPCopy 有缺點~~今天在測試時發現的,當 string 內含有二進制
資料時,如 #00 ,那便會發生拷貝的錯誤,它只會複製 #00 之前的資料,
就算使用 StrPLCopy 指定長度也一樣。
 
为什么不用 Pchar(str) 呢?
 
为什么不自己写一个函数呢
 
>>當 string 內含有二進制資料時

string 内怎么会又二进制资料?那就不是string了.
string的定义应该是可显示的7位ascii字符,使用时要注意.
 
to 三代坦克:
底下是 Delphi HELP,說明了它是 8-bit 的字元。
--------------------------------------------------------------
A string represents a sequence of characters. Object Pascal supports the following predefined string types.

Type Maximum length Memory required Used for
ShortString 255 characters 2 to 256 bytes backward compatibility
AnsiString ~2^31 characters 4 bytes to 2GB 8-bit (ANSI) characters
WideString ~2^30 characters 4 bytes to 2GB Unicode characters

COM servers and interfaces
---------------------------------------------------------------
 
function StrPCopy(Dest: PChar
const Source: string): PChar;
function StrMove(Dest: PChar
const Source: PChar
Count: Cardinal): PChar;
function StrCopy(Dest: PChar
const Source: PChar): PChar;
function StrLCopy(Dest: PChar
const Source: PChar
MaxLen: Cardinal): PChar;
 
后退
顶部