【发布时间】:2011-12-24 07:29:08
【问题描述】:
我正在尝试将以下 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# 中等于 int.Parse(tmp, "x"),snprintf 是 String.Format,但我不确定其余部分。
如何将此片段移植到 C#?
【问题讨论】:
-
已用可能有用的信息更新了我的答案
-
我假设 QString 是一个 QT 类?我添加了标签。