给定无符号数,获得前导1位数的好方法(最好是快速方法)是什么?
我需要这个来计算四点IPv4网络掩码的CIDR数.
注意:我已经看到了得到尾随数1位,所以我可以进行基于表的查找.
注2:尽管我添加了几个语言标签,但对我来说这是关于算法的,所以如果你有一个很好的用另一种语言,请随时发布.
编辑:关于endian-ness.
我刚刚发现INET_ADDR函数和IN_ADDR结构以big-endian形式存储IPv4地址,而x86是little-endian,我使用的大多数处理器也是little-endian.
因此,针对此特定情况的查找表足够快.
但是感谢其他答案:他们在更常见的情况下工作得非常好.
--jeroen
我正在将一些C头文件翻译成Delphi.
在这些头文件中,两个文件彼此共享它们的结构.
当我在Delphi中尝试这个时,它给了我循环引用错误.
所以我目前正在单个.pas文件中编写两个头文件的翻译.
有没有其他方法来解决这个问题?
这是一个小例子.
实际的头文件比较复杂:
== == File1.h
struct a
{
int data;
}
int compare(struct a,struct b);
Run Code Online (Sandbox Code Playgroud)
== == File2.h
struct b
{
int data;
}
int compare(struct A,struct b);
Run Code Online (Sandbox Code Playgroud)
== == File1.pas
uses File2;
type
a = packed record
data: Integer;
end;
compare = function(d1: a; d2: b): Integer; cdecl;
Run Code Online (Sandbox Code Playgroud)
== == File2.pas
uses File1;
type
b = packed record
data: Integer;
end;
compare = function(d1: a; d2: b): Integer; cdecl;
Run Code Online (Sandbox Code Playgroud) 我正在将我的程序从Delphi 2005升级到Delphi 2010.我遇到了RSA功能问题
以下程序在D2005下运行良好,但在D2010中,结果始终为零.我已经尝试使用新版本的libeay32.dll
function ReadPrivateKey(AFileName: TFileName): pEVP_PKEY;
var
keyfile: pBIO;
a : pEVP_PKEY;
begin
a := nil;
keyfile := BIO_new(BIO_s_file());
BIO_read_filename(keyfile, PAnsiChar(AFilename));
result := PEM_read_bio_PrivateKey(keyfile, a, nil, nil);
if result = nil then
begin
raise Exception.Create('Não foi possível ler a chave privada.');
end;
BIO_free(keyfile);
end;
Run Code Online (Sandbox Code Playgroud)
有人有这个问题吗?谢谢山姆
我想知道是否有办法改变TShape的方向,而不是方形,我想旋转它看起来像一个钻石..
如果不是TShape的方式,怎么办呢?
说我有
type
TLight = class
private
Ftimer : TTimer;
property IsAutoRotating: Boolean read Ftimer.Enabled;
Run Code Online (Sandbox Code Playgroud)
显然,这不会编译,但为什么不编译,以及如何解决这个问题(最好不要将该状态保持在单独的var中.
如何设置HTTPOnly标志?TCookie 没有任何方法或属性来指定 HTTPOnly 标志。
编辑:
错误确实在处理中; parseError也失败了,揭示了真正的错误; 请参阅该错误的后续问题.
老问题:
不知何故,有时下面的代码在使用Delphi XE中的msxml单元加载XML时会生成异常.它在使用MSXML6的Windows XP Professional x86 SP3和使用MSXML6的Windows 7 Ultimate x64 SP1上失败.
procedure TXMLEOSErrorTestCase.Test;
var
XmlDocument: IXMLDOMDocument3;
XmlFileName: string;
begin
XmlDocument := CoFreeThreadedDOMDocument60.Create();
XmlFileName := TPath.Combine(TPath.GetDirectoryName(ParamStr(0)), '1-Normal.xml');
if not XmlDocument.load(XmlFileName) then
RaiseLastOSError();
end;
Run Code Online (Sandbox Code Playgroud)
在XmlDocument.load方法期间发生此错误:
EOSError at $00423B2D
A call to an OS function failed
Run Code Online (Sandbox Code Playgroud)
我将XML修剪为下面的XML.
这是XML文件的十六进制转储:
000000: 3C 3F 78 6D 6C 20 76 65 72 73 69 6F 6E 20 3D 20 <?xml version =
000010: 22 31 2E 30 22 20 65 …Run Code Online (Sandbox Code Playgroud) 为什么编译器不允许for ... in循环中的赋值?
procedure TForm1.Button1Click(Sender: TObject);
Var
ars : Array [0..10] of Integer;
s : Integer;
ct : Integer;
begin
ct := 0;
for s in ars do
Begin
s := ct; // Does not compile!
Inc(ct);
End;
End;
Run Code Online (Sandbox Code Playgroud) 我正在使用Delphi 4,我想创建一个标准的非阻塞套接字,而不是杂乱的代码(Pv4和Pv6).我想得到计算机的IP地址,并能够ping任何人这样做.我是否可以使用Indy 10或Indy 9进行此操作.并且有任何一个代码可以执行任何这些操作并进行测试.
在进行项目时,我们收到4000多个警告。为了删除其中的一些,我发现了一个编译器指令为NEXTGEN。
使用此指令后,我发现警告到257还有更多的最小化。
我想知道在使用编译器指令时是否有任何问题。我的Windows应用程序是否有此指令的任何缺点。我正在使用Delphi 10。
在Embarcadero网站上,我发现的信息很少。
谁能告诉我一些相同的东西?
我正试图询问一些服务信息.有时,应用程序的安装程序无法正确安装,因此注册表不包含服务条目.我想找出哪些安装程序步骤正确执行,即使在安装程序中没有正确登录的系统上也是如此.
如果MyService不存在,catch即使异常处理文档表明裸catch应该足够,下面的脚本也不会进入块:
try {
$path = 'hklm:\SYSTEM\CurrentControlSet\services\MyService'
$key = Get-Item $path
$namevalues = $key | Select-Object -ExpandProperty Property |
ForEach-Object {
[PSCustomObject] @{
Name = $_;
Value = $key.GetValue($_)
}
}
$namevalues | Format-Table
}
catch {
$ProgramFilesX86 = [System.Environment]::GetFolderPath("ProgramFilesX86");
$ProgramFiles = [System.Environment]::GetFolderPath("ProgramFiles");
Write-Host $ProgramFilesX86
Write-Host $ProgramFiles
}
Run Code Online (Sandbox Code Playgroud)
为什么这样,我该如何强迫它最终catch?
这是PowerShell输出的内容:
Get-Item : Cannot find path 'HKLM:\SYSTEM\CurrentControlSet\services\MyService' because it does not exist.
At C:\Users\Developer\...\GetMyServiceInfo.ps1:17 char:12
+ $key = Get-Item $path
+ …Run Code Online (Sandbox Code Playgroud)