我有这样一个字符串
x 2x字符(每两个字符后加个空格,奇数加零不足,且这两个字符是左右颠倒的) y 2y字符(同2x)
例如
(1) 5 23 65 09 3 56 07
(2) 6 32 11 65 4 71 82我要的到的结果是
(1)给据5 后去五个数 32569 ;根据3后取3个数 657
(2)给据6 后去6个数 231156 ;根据4后取4个数 1728
32569;657
231156;1728
为我最后想得到的字串
x 2x字符(每两个字符后加个空格,奇数加零不足,且这两个字符是左右颠倒的) y 2y字符(同2x)
例如
(1) 5 23 65 09 3 56 07
(2) 6 32 11 65 4 71 82我要的到的结果是
(1)给据5 后去五个数 32569 ;根据3后取3个数 657
(2)给据6 后去6个数 231156 ;根据4后取4个数 1728
32569;657
231156;1728
为我最后想得到的字串
在Delphi中,整数的存放顺序如下 AB CD //AB是高字节,CD是低字节。在AB字节中,B是高位,A是低位,CD同 因而你可将每个字符转换成对应的数字,存放在连续的内存中,然后强制转换成WORD,或DWORD型变量,按16进制输出,即可
function GetXStr(str: string): string;
var
i, j, beginpos: integer;
tempstr, tempstr2: string;
temp: char;
begin
str := str + ' 0 ';
beginpos := 1;
for i := 1 to Length(str) - 2 do
begin
if (str[i] = ' ') then
begin
if (str[i + 2] = ' ') then
begin
tempstr := Copy(str, beginpos, i - beginpos);
for j := 1 to Length(tempstr) do
if tempstr[j] <> ' ' then tempstr2 := tempstr2 + tempstr[j];
Result := Result + ';' + Copy(tempstr2, 2, strtoint(tempstr2[1]));
tempstr2 := '';
beginpos := i + 1;
end
else
begin
temp := str[i + 1];
str[i + 1] := str[i + 2];
str[i + 2] := temp;
end;
end;
end;
end;
procedure FragStr(AStr : String; AStrs : TStrings) ;
var
vD ; TStrings;
I, vI, vC : Integer;
vS : String;
function ReadStr(ACount : Integer; var AIndex : Integer) : String;
var
vS : String;
begin
vS := '';
while Length(vS) < ACount do
begin
vS := vS + vD[AIndex][2] + vD[AIndex][1];
Inc(AIndex);
end;
Result := Copy(vS, 1, ACount);
end;
begin
AStrs.Clear;
vD := TStringList.Create;
try
vD.Text := StringReplace(AStr, ' ', #$D#$A, [rfReplaceAll]);
I := 0;
while vD.Count > I do
begin
vC := Strtoint(vD[I]);
Inc(I);
AStrs.Add(ReadStr(vC, I));
end;
finally
vD.Free;
end;
end;function GetStr(AStr : String) : String;
var
I : Integer;
vD : TStrings;
begin
vD := TStringList.Create;
Result := '';
try
FragStr(Astr, vD);
for I := 0 to vD.Count - 1 do
begin
Result := vD[I] + ';';
end;
finally
vD.Free;
end;
end;