【发布时间】:2020-05-25 07:45:11
【问题描述】:
早安,
相信一切都会好的。
我想将 Move 函数从 Pascal 复制到 PHP。
这是我在 Pascal 中所拥有的:
function Encode(const S: AnsiString): AnsiString;
const
Map: array [0 .. 63] of Char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +
'abcdefghijklmnopqrstuvwxyz0123456789+/';
var
i: LongInt;
begin
i := 0; ;
Move(S[1], i, Length(S));
Result := Map[i mod 64] + Map[(i shr 6) mod 64];
end;
这是我在 PHP 中所拥有的:
private function Encode($pass)
{
$map = str_split('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/');
$i = 0;
$this->MoveFunction($pass[0], $i, mb_strlen($pass));
$result = $map[$i % 63] . $map[($i >> 6) % 64];
return $result;
}
现在我知道 Move 函数用于将一段内存从一个地方复制到另一个地方,只是不知道从哪里开始以及如何完成。我无法在 PHP 中复制 Pascal 的结果。我已经尝试过子字符串 ens。无济于事。
“$this->MoveFunction”是我需要编写的函数,以便从 pascal 复制 Move 函数的功能。我需要使用从 pascal 中移动的相同结果,以便使用来自类似数据库的相同加密字段。
我认为这是在 Pascal 中进行测试的一种简单方法:
var
A: array[1..4] of Char;
B: Integer;
begin
A[1] := 'W';
A[2] := 'H';
A[3] := 'A';
A[4] := 'T';
B := 5;
Move(A, B, SizeOf(B));
showmessage(B.ToString()); // 4718679
任何帮助将不胜感激。
提前谢谢你。
【问题讨论】:
-
奇怪的代码,至少可以这么说。我希望你永远不要使用超过 4 个字符的字符串来调用
Encode()。