gpt4 book ai didi

c# - 将 C++ 函数转换为 C#

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:34 25 4
gpt4 key购买 nike

我正在尝试将以下 C++ 函数移植到 C#:

QString Engine::FDigest(const QString & input)
{
if(input.size() != 32) return "";

int idx[] = {0xe, 0x3, 0x6, 0x8, 0x2},
mul[] = {2, 2, 5, 4, 3},
add[] = {0x0, 0xd, 0x10, 0xb, 0x5},
a, m, i, t, v;

QString b;
char tmp[2] = { 0, 0 };

for(int j = 0; j <= 4; j++)
{
a = add[j];
m = mul[j];
i = idx[j];

tmp[0] = input[i].toAscii();
t = a + (int)(strtol(tmp, NULL, 16));
v = (int)(strtol(input.mid(t, 2).toLocal8Bit(), NULL, 16));

snprintf(tmp, 2, "%x", (v * m) % 0x10);
b += tmp;
}

return b;
}

部分代码很容易移植,但我在这部分遇到了问题:

tmp[0] = input[i].toAscii();
t = a + (int)(strtol(tmp, NULL, 16));
v = (int)(strtol(input.mid(t, 2).toLocal8Bit(), NULL, 16));

snprintf(tmp, 2, "%x", (v * m) % 0x10);

我发现 (int)strtol(tmp, NULL, 16) 在 C# 和 snprintf 中等于 int.Parse(tmp, "x") String.Format,但是我不确定它的其余部分。

如何将此片段移植到 C#?

最佳答案

编辑 我怀疑您的代码实际上对输入数据进行了 MD5 摘要。请参阅下面的基于该假设的片段。

翻译步骤

一些应该很好用的提示1

Q: tmp[0] = input[i].toAscii();

bytes[] ascii = ASCIIEncoding.GetBytes(input);
tmp[0] = ascii[i];

Q: t = a + (int)(strtol(tmp, NULL, 16));

t = a + int.Parse(string.Format("{0}{1}", tmp[0], tmp[1]),
System.Globalization.NumberStyles.HexNumber);

Q: v = (int)(strtol(input.mid(t, 2).toLocal8Bit(), NULL, 16));

没有关于 toLocal8bit 的线索,需要阅读 Qt 文档...

Q: snprintf(tmp, 2, "%x", (v * m) % 0x10);

{
string tmptext = ((v*m % 16)).ToString("X2");
tmp[0] = tmptext[0];
tmp[1] = tmptext[1];
}

如果...只是 MD5 怎么办?

你可以直接试试看是否达到你的要求:

using System;

public string FDigest(string input)
{
MD5 md5 = System.Security.Cryptography.MD5.Create();
byte[] ascii = System.Text.Encoding.ASCII.GetBytes (input);
byte[] hash = md5.ComputeHash (ascii);

// Convert the byte array to hexadecimal string
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hash.Length; i++)
sb.Append (hash[i].ToString ("X2")); // "x2" for lowercase
return sb.ToString();
}

1 明确未优化,旨在作为快速提示;根据需要进行优化

关于c# - 将 C++ 函数转换为 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8048498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com