2013-01-23 145 views
1

对不起,所有这些问题,我一直在问。总之我的问题是 我正确地将值转换为字符串?(不是一个unincode字符串)。复制零终止原始字节缓冲区到字符串

const 
address:dword=$0057B568; 
var 
a:string; 
len,i:dword; 
begin 
len:=0; 
repeat 
inc(len); 
until ((pbyte(address+len)^=0));//and(pbyte(address+1)^=0));(for unincode) 

for I:=0 to len do 
a:=a+chr(pbyte(address+I)^); 
//stringreplace(a,#0,'',[rfreplaceall,rfignorecase]); 
MessageBox(0,pchar(a),'',0); 
end. 
+0

虽然0结尾的字符串ü可以使用类型转换为罗布下面指出的,我建议ü也了解以下标准程序:移动,SetLength,的SetString –

+4

代码缩进是非常重要的。你应该使用缩进。 –

回答

8

不,这是不正确的。代码关闭一个字节。首先,通过忽略第一个字节,假定字符串至少有一个字符长。接下来,它复制一个额外的字节。您的代码可以大大简化:

a := PAnsiChar(address); 
+1

Sicne他的代码也显示了unicode缓冲区的痕迹,我会加上你的答案PWideChar和PAnsiChar以及AnsiString和UnicodeString/WideString –