小编Eri*_* S.的帖子

如何将这个XOR加密函数从Delphi转换为C#?

以下Delphi例程最初来自很久以前的CompuServe发布,用于加密我们数据库中的各种信息.下面是Delphi 2007和(由于一些有关Unicode差异的SO帮助)Delphi XE版本.

我们一直试图将其转换为C#,并且已经接近了,但我们在某处遗漏了某些东西.不幸的是,我们的Delphi家伙(我)不知道C#,而C#家伙是Delphi的新手.C#没有(似乎)具有AnsiString的概念,因此解决方案可能涉及字节或字符数组?

我们非常感谢将此转换为C#的任何帮助.

Delphi 2007版(ASCII)

function EncodeDecode(Str: string): string;
const
  Hash: string = '^%12hDVjED1~~#29afdmSD`6ZvUY@hbkDBC3fn7Y7euF|R7934093*7a-|-  Q`';
var
  I: Integer;
begin
  for I := 1 to Length (Str) do
    Str[I] := chr (ord (Str[I]) xor not (ord (Hash[I mod Length (Hash) + 1])));
  Result := Str;
end;
Run Code Online (Sandbox Code Playgroud)

Delphi XE版本(Unicode)

function TfrmMain.EncodeDecode(Str: AnsiString): AnsiString;
const
  Hash: string = '^%12hDVjED1~~#29afdmSD`6ZvUY@hbkDBC3fn7Y7euF|R7934093*7a-|-  Q`';
var
  I: Integer;
begin
  Result := Str;
  for I := 1 to Length (Result) do
    Result[I] := AnsiChar (ord (Result[I]) xor …
Run Code Online (Sandbox Code Playgroud)

c# delphi encryption

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

涉及枚举类型的对象继承

Delphi 2007,明年转向Delphi XE.

我们的产品广泛使用第三方组件.我们不直接使用该组件,而是使用它的自定义后代,我们已经添加了相当多的额外行为(自定义后代组件是几年前由已经退休的开发人员开发的).

在第三方Parent类的源单元中,声明了一些枚举类型,它们控制组件的各种操作:

TSpecialKind = (skAlpha, skBeta, skGamma);
TSpecialKinds = set of TSpecialKind;
Run Code Online (Sandbox Code Playgroud)

在我们的后代类中,我们想要添加新行为,这需要扩展枚举类型的选择.基本上,我们想要这个:

TSpecialKind = (skAlpha, skBeta, skGamma, skDelta, skEpsilon);
TSpecialKinds = set of TSpecialKind;
Run Code Online (Sandbox Code Playgroud)

显然,我们希望避免编辑第三方代码.简单地重新声明枚举类型,重复原始值并在我们自己的后代单元中添加新值是否有效?它会对现有代码产生任何影响吗?

编辑:示例场景(希望)澄清.假设您有一个(父)组件用于订购车辆零件.父单元具有用于车辆类型的枚举类型Tvkind,其值为vkCar和vkCycle.除其他外,这些值用于表示车辆有多少车轮,4或2.

现在,在您的后代组件中,您也希望能够处理三轮车辆.扩展Tvkind枚举类型以包含新值vkTrike似乎是一种显而易见的方法.但是,如果您无权访问或不想修改父组件代码,该怎么办?

delphi delphi-2007

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

将Delphi 2007字符串加密例程转换为Delphi XE

我们有一个Delphi 2007例程用于加密表中的密码.该例程最初是在十年或更久以前从CompuServe帖子中获取的,并且存在大量使用此例程加密的数据.

原始例程的核心是:

chr(ord(Str[I]) xor not(ord(Id[I mod length(Id) + 1])));
Run Code Online (Sandbox Code Playgroud)

我知道由于Unicode的原因,转换为Delphi XE会有问题,因此我将该代码分解为一个函数,该函数在备忘录中显示计算的每个步骤:

function TfrmMain.EncodeDecode(AString: string): string;
const
  Hash: string = '^%12h2DBC3f41~~#6093fn7mY7eujEhbFD3DZ|R9aSDVvUY@dk79*7a-|-  Q';
var
  I: Integer;
  IMod: Integer;
  HMod: Char;
  OMod: Integer;
  AStrI: Char;
  OStrI: Integer;
  ResultStr: string;
  XOrNot: Integer;
  ChrXN: AnsiChar;
begin
  Memo1.Clear;
  Memo1.Lines.Add ('AStrI' + TAB + 'IMod' + TAB + 'HMod' +
    TAB + 'OMod' + TAB + 'OStrI' + TAB + 'XOrNot' + TAB + 'ChrXN');

  for I := 1 to Length (AString) do
  begin
    IMod := …
Run Code Online (Sandbox Code Playgroud)

delphi unicode delphi-xe

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

如何使用C#解析深度XML值

在Visual Studio 2010,.NET v4中工作

我是C#和XML的新手.使用网站资源,我能够找到一种相当简单的方法来解析特定值的XML.然而,XML变得越来越复杂,我正在使用的方法(通过迭代导航技术)开始看起来相当荒谬,有许多嵌套的reader.Read()调用.我确信这种方式不那么令人尴尬,但是当你拥有的唯一工具就是锤子......

所以,问题是:什么是一个整洁,干净的方式来解析XML(见下文),只有从项目匹配返回所有"动作"值的列表,<item itemkind="Wanted"><phrase>SomeSearchString</phrase>

这是XML的一个片段:

<formats>
  <items>
    <item itemkind="NotWanted">
      <phrase>Not this one</phrase>
      <actions>
        <action>
          <actionkind>SetStyle</actionkind>
          <parameter>Normal</parameter>
        </action>
        <action>
          <actionkind>SetMargins</actionkind>
          <parameter>0.25,0.25,1,4</parameter>
        </action>
      </actions>
    </item>

    <item itemkind="Wanted">
      <phrase>SomeSearchString</phrase>
      <actions>
        <action>
          <actionkind>Action 1</actionkind>
          <parameter>Param 1</parameter>
        </action>
        <action>
          <actionkind>Action 2</actionkind>
          <parameter>Param 2</parameter>
        </action>
        <action>
          <actionkind>Action 3</actionkind>
          <parameter>Param 3</parameter>
        </action>
      </actions>
    </item>
  </items>

  <styles>
    <style stylename="Normal">
      <fontname>Arial</fontname>
      <fontsize>10</fontsize>
      <bold>0</bold>
    </style>
    <style stylename="Heading">
      <fontname>fntame frhead</fontname>
      <fontsize>12</fontsize>
      <bold>1</bold>
    </style>
  </styles>
</formats>
Run Code Online (Sandbox Code Playgroud)

这是我到达的代码.它确实有效,但是,好吧,看看你自己.请温柔:

public static List<TAction> GetActionsForPhraseItem(string AFileName, string APhrase)
{ …
Run Code Online (Sandbox Code Playgroud)

c# xml

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

标签 统计

delphi ×3

c# ×2

delphi-2007 ×1

delphi-xe ×1

encryption ×1

unicode ×1

xml ×1