所以我有2个字节,例如:13, 61
我想将它们转换成16位:3389
现在我正在使用该功能:
function IntPower(const N, k: integer): integer;
var
i: Integer;
begin
Result:= (256 * N) + k;
end;
Run Code Online (Sandbox Code Playgroud)
Delphi 有没有更好的方法来做到这一点?
在搜索Win32 LDAP API函数的引用时,我发现了以下JwaWinLDAP.pas单元.
在此单元上,声明函数ldap_search_st:
function ldap_search_st(ld: PLDAP; base: PAnsiChar; scope: ULONG;
filter, attrs: PAnsiChar; attrsonly: ULONG; var timeout: TLDAPTimeVal;
var res: PLDAPMessage): ULONG; cdecl;
Run Code Online (Sandbox Code Playgroud)
超时:TLDAPTimeVal参数声明为:
PLDAPTimeVal = ^TLDAPTimeVal;
l_timeval = packed record
tv_sec: Longint;
tv_usec: Longint;
end;
LDAP_TIMEVAL = l_timeval;
PLDAP_TIMEVAL = ^LDAP_TIMEVAL;
TLDAPTimeVal = l_timeval;
Run Code Online (Sandbox Code Playgroud)
在代码上,如果我使用类似的东西:
procedure foo;
var
TimeVal: PLDAPTimeVal;
begin
ldap_search_st(foo1, Nil, 0, PAnsiChar('(objectClass=*)'), Nil, 0, TimeVal, foo2);
end;
Run Code Online (Sandbox Code Playgroud)
编译器给我错误:
[dcc32错误]实际和正式var参数的类型必须相同
因为超时参数.如果我将TimeVal类型更改为TLDAPTimeVal,它将编译并且应用程序正常工作.
问题是:当我在Delphi中看到类型声明时,它们总是如下:
type
PType1 = ^Type1
Type1 = …Run Code Online (Sandbox Code Playgroud) 我相信这是一个非常基本的问题,但我正在开始研究 JavaScript 和 RSA,所以我有点迷茫。我刚刚下载了库 Cryptico,它为我提供了一个易于使用的 RSA 密钥生成/加密/解密。生成的 RSA 密钥的公共部分,只需使用以下命令即可轻松提取:
publicKeyString(RsaKey)
这是:
my.publicKeyString = function(rsakey)
{
pubkey = my.b16to64(rsakey.n.toString(16));
return pubkey;
}
Run Code Online (Sandbox Code Playgroud)
在函数中生成密钥时定义了 rsakey.n:
function RSAGenerate(B, E)
{
var rng = new SeededRandom();
var qs = B >> 1;
this.e = parseInt(E, 16);
var ee = new BigInteger(E, 16);
for (;;)
{
for (;;)
{
this.p = new BigInteger(B - qs, 1, rng);
if (this.p.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) break;
}
for (;;)
{
this.q = new BigInteger(qs, 1, rng);
if …Run Code Online (Sandbox Code Playgroud) 我有这个记录:
type
TSocks5_Packet = record
Socks_ID: String[6];
Socks_Packet: array of byte;
end;
Run Code Online (Sandbox Code Playgroud)
我把String [6]因为我确定这个字符串总是有6个字符(并尝试方便我的工作,但还不够).
我试着在这里发送这条记录:
procedure TForm1.SocksServerClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
Socks5_Request: TSocks5_Packet;
begin
SetLength(Socks5_Request.Socks_Packet, Socket.ReceiveLength);
Socket.ReceiveBuf(Socks5_Request.Socks_Packet[0], Length(Socks5_Request.Socks_Packet));
Socks5_Request.Socks_ID:= PSocket_Identity(Socket.Data).Sock_ID;
TunnelClient.SendBuf(Socks5_Request, Length(Socks5_Request.Socks_Packet + Length(Socks5_Request.Socks_ID)));
end;
Run Code Online (Sandbox Code Playgroud)
我很确定问题出在SendBuf第二个参数上,其中我指定了要发送的字节数.什么是正确的方法,以及我应该如何学习它?