小编Jer*_*ers的帖子

获得前导1位的数量

给定无符号数,获得前导1位数的好方法(最好是快速方法)是什么?

我需要这个来计算四点IPv4网络掩码的CIDR数.

注意:我已经看到了得到尾随数1位,所以我可以进行基于表的查找.

注2:尽管我添加了几个语言标签,但对我来说这是关于算法的,所以如果你有一个很好的用另一种语言,请随时发布.

编辑:关于endian-ness.

我刚刚发现INET_ADDR函数IN_ADDR结构以big-endian形式存储IPv4地址,而x86是little-endian,我使用的大多数处理器也是little-endian.
因此,针对此特定情况的查找表足够快.
但是感谢其他答案:他们在更常见的情况下工作得非常好.

--jeroen

c# c++ delphi algorithm bit-manipulation

2
推荐指数
4
解决办法
2154
查看次数

用户列表中的循环单元引用是否可以在delphi中进行?


我正在将一些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)

c delphi

2
推荐指数
1
解决办法
1013
查看次数

从Delphi 2005升级到2010 libeay32.dll

我正在将我的程序从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)

有人有这个问题吗?谢谢山姆

delphi unicode rsa delphi-2010

2
推荐指数
1
解决办法
1037
查看次数

改变形状的方向

我想知道是否有办法改变TShape的方向,而不是方形,我想旋转它看起来像一个钻石..

如果不是TShape的方式,怎么办呢?

delphi vcl

2
推荐指数
2
解决办法
568
查看次数

让getter返回私有var属性的值

说我有

type
  TLight = class
  private
    Ftimer : TTimer;
    property IsAutoRotating: Boolean read Ftimer.Enabled;
Run Code Online (Sandbox Code Playgroud)

显然,这不会编译,但为什么不编译,以及如何解决这个问题(最好不要将该状态保持在单独的var中.

delphi properties

1
推荐指数
1
解决办法
255
查看次数

如何设置 cookie HTTPOnly 标志?

如何设置HTTPOnly标志?TCookie 没有任何方法或属性来指定 HTTPOnly 标志。

delphi

1
推荐指数
1
解决办法
2183
查看次数

加载Windows-1252 XML文件时,"对OS功能的调用失败"

编辑:

错误确实在处理中; 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)

delphi msxml6 delphi-xe eoserror

1
推荐指数
1
解决办法
6104
查看次数

Delphi:用于"for In"的变量无法分配!

为什么编译器不允许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 delphi-2010

0
推荐指数
2
解决办法
958
查看次数

Delphi使用Indy 10

我正在使用Delphi 4,我想创建一个标准的非阻塞套接字,而不是杂乱的代码(Pv4和Pv6).我想得到计算机的IP地址,并能够ping任何人这样做.我是否可以使用Indy 10或Indy 9进行此操作.并且有任何一个代码可以执行任何这些操作并进行测试.

delphi indy indy10 delphi-4 indy-9

0
推荐指数
1
解决办法
1152
查看次数

NEXTGEN编译器有条件使用什么?

在进行项目时,我们收到4000多个警告。为了删除其中的一些,我发现了一个编译器指令为NEXTGEN

使用此指令后,我发现警告到257还有更多的最小化。

我想知道在使用编译器指令时是否有任何问题。我的Windows应用程序是否有此指令的任何缺点。我正在使用Delphi 10

在Embarcadero网站上,我发现的信息很少。

谁能告诉我一些相同的东西?

delphi delphi-10-seattle

0
推荐指数
1
解决办法
1753
查看次数

为什么异常没有让我进入catch块?

我正试图询问一些服务信息.有时,应用程序的安装程序无法正确安装,因此注册表不包含服务条目.我想找出哪些安装程序步骤正确执行,即使在安装程序中没有正确登录的系统上也是如此.

如果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)

powershell exception-handling exception powershell-4.0

0
推荐指数
1
解决办法
76
查看次数