Delphi 将字节数组转换为PAnsiChar
我使用以下方法将名为“TmpData”的字节数组转换为PAnsiChar:Delphi 将字节数组转换为PAnsiChar,delphi,delphi-xe2,Delphi,Delphi Xe2,我使用以下方法将名为“TmpData”的字节数组转换为PAnsiChar: PAnsiChar(@TmpData[0]); 但有些数据有换行符。如何删除换行符?请看下图 注意,在下面的回答中,我假设您的字节数组是ANSI编码的,以零结尾 将数据分配给字符串: var str: string; .... str := string(PAnsiChar(@TmpData[0])); 然后删除换行符: str := StringReplace(str, sLineBreak, '', [rf
PAnsiChar(@TmpData[0]);
但有些数据有换行符。如何删除换行符?请看下图
注意,在下面的回答中,我假设您的字节数组是ANSI编码的,以零结尾
将数据分配给字符串:
var
str: string;
....
str := string(PAnsiChar(@TmpData[0]));
然后删除换行符:
str := StringReplace(str, sLineBreak, '', [rfReplaceAll]);
您可能希望删除单个#10
和#13
字符,或者删除所有空白字符。这取决于你的需要,但本质在这里
或者,您可以遍历字节数组,删除所有希望删除的字节,例如,值为10和13,或值小于32的字节。然后转换到PAnsiChar
idxDst := 0;
idxSrc := 0;
while TmpData[idxSrc] <> 0 do begin
if TmpData[idxSrc] >= 32 then begin
TmpData[idxDst] := TmpData[idxSrc];
inc(idxDst);
end;
inc(idxSrc);
end;
TmpData[idxDst] := 0;
idxDst:=0;
idxSrc:=0;
当TmpData[idxSrc]0开始时
如果TmpData[idxSrc]>=32,则开始
TmpData[idxDst]:=TmpData[idxSrc];
公司(idxDst),;
结束;
公司(idxSrc),;
结束;
TmpData[idxDst]:=0;
那么您想从TmpData中删除所有的#10和#13吗?PAnsiChar
类型转换和您的循环都假定TmpData
以null结尾。如果不是这样,则必须考虑实际数组长度。要将TmpData
分配给不存在空终止符的字符串,必须先调用SetString()
将TmpData
数据复制到ansisting
变量中,然后您可以将其分配给目标字符串
变量。@Remy该假设在问题中是隐式的,问题中没有任何内容表明字节数组是否包含任何空字节。@Remy问题中的强制转换表示将字节数组广播到PAnsiChar
并不保证为空终止符存在于阵列中。