比如有个结构体
TAAA=record
A :array[0..9] of char;
B :array[0..9] of char;
C :array[0..9] of char;
D :array[0..0] of char;
end;
其中AAA.A为11, AAA.B为22, AAA.C为33, AAA.D为9有什么办法可以将上面这个结构体转成下面的这字符串呢
11 22 33 9
其中11和22之间是8个空格,也就是数据的长度跟结构体定义的相同
TAAA=record
A :array[0..9] of char;
B :array[0..9] of char;
C :array[0..9] of char;
D :array[0..0] of char;
end;
其中AAA.A为11, AAA.B为22, AAA.C为33, AAA.D为9有什么办法可以将上面这个结构体转成下面的这字符串呢
11 22 33 9
其中11和22之间是8个空格,也就是数据的长度跟结构体定义的相同
A :array of char;
B :array of char;
C :arrayof char;
D :array of char;
end;
v : TAAA ; SetLength(var.A, Length(v.A) + 1) ;
v.A[High(v)] := 1 ;
SetLength(v.A, Length(v.A) + 1) ;
v.A[High(v)] := 1 ;
SetLength(v.B, Length(v.B) + 1) ;
v.B[High(v)] := 2 ;
SetLength(v.B, Length(v.B) + 1) ;
v.B[High(v)] := 2 ;
function convers(v : TAAA) :String ;
var
str : String ;
i, Len : Integer ;
begin
// v.A
Result := '' ;
str := '' ;
Len := Length(v.A) ;
for i := 0 to Len -1 do
begin
str := str + v.A[i] ;
end ;
while(Length(str) <10) do
begin
str := str + ' ' ;
end ;
Result := Result + str ;
//v.B
Len := Length(v.B) ;
str := '' ;
for i := 0 to Len -1 do
begin
str := str + v.B[i] ;
end ;
while(Length(str) <10) do
begin
str := str + ' ' ;
end ;
Result := Result + str ;
//v.C 和v.D不写啦
end ;
之后再赋值,这样转字符串的时候#0会被自动截取的至于数组转字符串方法很多的,有段时间没用了,我身边也没有环境,你试下string(AAA.A)或者用pchar中转一下,我印象里很简单的
Create your own Database using Delphi's "File Of" Typed Files
http://delphi.about.com/od/fileio/a/fileof_delphi.htm
move(aaa,s[1],sizeof(Taaa));
A :array[0..9] of char;
B :array[0..9] of char;
C :array[0..9] of char;
D :array[0..9] of char;
end;
TBBB = record
A: array [0..39] of Char;
END;
FillChar(AAA,SizeOf(AAA),#0);
AAA.A:= '11';
AAA.B:= '22';
AAA.C:= '33';
AAA.D:= '44';
//转型
BBB:= TBBB(AAA);
Str:= EmptyStr;
for I:= 0 to Length(BBB.A) - 1 do
begin
C:= BBB.A[I];
if C = #0 then
C:= ' ';
Str:= Str + C;
end;
ShowMessage(Str);
A :array[0..9] of char;
B :array[0..9] of char;
C :array[0..9] of char;
D :array[0..0] of char;
end;
还得补充一下
s := StringReplace(S , #0 , #$20 , [rfReplaceAll]);//他要求空格是空格
move(aaa,s[1],sizeof(Taaa));
----------------------------------上面这段代码只是返回TAAA.A的数据吧?
这个不对,只是返回TAAA.A的数据,我是想把TAAA.A, TAAA.B等连在一起
//AAA.A[0]:= '11'; .....
SetLength(S, SizeOf(TAAA));
Move(AAA, S[1], SizeOf(TAAA));
//反方向的也类似
var
S: string;
AAA: TAAA;
begin
FillChar(AAA, SizeOf(TAAA), $20);
with AAA do
begin
A[0] := '1'; A[1] := '1';
B[0] := '2'; B[1] := '2';
C[0] := '3'; C[1] := '3';
D[0] := '9';
end;
SetLength(S, SizeOf(TAAA));
Move(AAA, S[1], SizeOf(TAAA));
ShowMessage(S); // 11 ?
end;
这样赋值可以,但我是用StrPCopy(AAA.A, '11')赋值,这样赋值得到值只有11
这样赋值吧
B := '11';
Move(B[1], AAA.A, 2);
定义个字符串,setlength,然后结构体 赋值到 string,可以用Copymemory注意结构体的字节对齐,一般消息包用 packed record 好一点