【发布时间】:2014-06-18 10:32:26
【问题描述】:
我有一个用 VB.net 编写的代码,并将其翻译成 C#(通过某个站点)。代码并不复杂,所以大部分翻译结果都很好,没有任何问题。 但是,一个问题确实让我很头疼,虽然许多网站(包括这个)都引用了它,但我仍然无法让它运行。 我在 VB.Net 中有一个函数标记为:
Public Shared Function UTF8HexToByte(ByVal str As String) As Byte
译者将其改为:
public static byte UTF8HexToByte(string str)
稍后,在我的 C# 代码中,我将调用此函数:
for (int i = 0; i <= Key1.Length - 1; i++)
{
Key1[i] = 16 * UTF8HexToByte(TempKey1[2 * i]) + UTF8HexToByte(TempKey1[2 * i + 1]);
}
但是在 VB.net 中起作用的东西在这里不起作用。我收到此错误:
错误 7 'maker.Resources.makeC.UTF8HexToByte(string)' 的最佳重载方法匹配有一些无效参数
错误 8 参数 1:无法从 'byte' 转换为 'string'
现在,我想问题是UTF8HexToByte 正在接收一个字符串并返回一个字节,而我给它一个字节TempKey1 而不是一个字符串。
但它确实适用于 VB.Net 代码,所以我很困惑......这是 VB.Net 的代码:
For i As Integer = 0 To Key1.Length - 1
Key1(i) = 16 * UTF8HexToByte(TempKey1(2 * i)) + UTF8HexToByte(TempKey1(2 * i + 1))
Next
TempKey 是一个字节[],Key1 是一个字节[]。
任何帮助都可以。我真的坚持这个。
【问题讨论】:
-
char(TempKey1)有用吗?否则,您确定错误存在吗?如果Key1是一个字节,如您所说,我预计Key1.Length会出现错误。还是您的意思是“是一个字节数组”? -
尝试将字节显式转换为字符串;即 UTF8HexToByte(TempKey1[2 * i].ToString())
-
我猜这是在 VB.NET 中发生的隐式转换问题。 C# 的类型更安全,可以防止您在编译时使用错误输入的参数来调用此类接口。您可能需要最终明确地强制执行此(字符串)参数。无论如何,UTF8HexToByte 有一个非常误导性的签名,可能整个策略都应该重构。
-
@MrLister 字节数组。抱歉,我会修改 q。