我获得了一个从设备中获取指纹模板的SDK,我需要将其存储在SQL数据库中,然后重新加载到FP设备中。
SDK FP模板数据定义为template_data:array[0..1568] of ansichar;
。
通过使用以下代码将模板数据转换为字符串,可以将模板存储在数据库中。
SetString(s, user.template_data[i].template_data,
user.template_data[i].template_length);
将字符串从数据库转换回模板数据时会出现问题,使用StrLCopy
时只会复制前3个字符
StrLCopy(PChar(@user.template_data[0].template_data),
PChar(s), FieldByName('FPLen').AsInteger);
调试代码时,我注意到模板中有4个字符为空字符,所以我想这就是为什么仅复制前3个字符的原因。
需要一种将具有空字符的字符串复制到ansichar数组中的解决方案。
答案 0 :(得分:0)
尝试像David指出的那样将Move与FillChar一起使用
FillChar(ArrayVariable[0], length(ArrayVariable) * sizeof(char), #0);
Move(StringVariable[1], ArrayVariable[0], length(s) * sizeof(char));
如果空字符仍然使您感到混乱,您可以尝试通过简单的循环“标准化”变量的内容(因为不能使用StringReplace,因为每个空字符都被强制转换为#0 PChar)
var
i: Integer;
begin
i:=1;
while i <= Length(StringVariable) do begin
if StringVariable[i] = #0 then begin
Delete(StringVariable, i, 1)
end else begin
i := i+1;
end;
end;
end;
答案 1 :(得分:0)
不仅仅是这个吗?
function ArrayToString(const a: array of AnsiChar): string;
var
i: integer;
begin
for I := Low(a) to High(a) do
Result := Result + a[i]
end;