我有一个用VB.net编写的代码并将其翻译成C#(通过某个站点)。代码并不复杂,因此大多数翻译都没有问题,没有任何问题。 但是,一个问题确实让我头疼,虽然它在许多网站(包括这个网站)中被引用,但我仍然无法让它运行。 我在VB.Net中有一个函数decalred:
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是一个byte [],Key1是一个byte []。
任何帮助都可以。我真的坚持这个。
答案 0 :(得分:0)
方法签名告诉您它正在期待字符串。 'maker.Resources.makeC.UTF8HexToByte(string)' has some invalid arguments
改变
Key1[i] = 16 * UTF8HexToByte(TempKey1[2 * i]) + UTF8HexToByte(TempKey1[2 * i + 1]);
到
Key1[i] = 16 * UTF8HexToByte(System.Text.Encoding.UTF8.GetString(new []{TempKey1[2 * i]})) + UTF8HexToByte(System.Text.Encoding.UTF8.GetString(new []{TempKey1[2 * i + 1]}));
答案 1 :(得分:0)
我对VB.NET不太满意,但是一小段测试代码表明我很高兴将byte
传递给期望string
的函数。这根本不是C#所能满足的,所以你别无选择,只能编写一些进行转换的代码。
要获得并保留原始代码的语义,您需要弄清楚VB.NET要从byte
转换为string
并将其复制的内容。
这不仅仅是对byte
ToString()
方法的调用,这是不可能的,所以
Key1[i] = 16 * UTF8HexToByte(TempKey1[2 * i].ToString()) + UTF8HexToByte(TempKey1[2 * i + 1].ToString());
您在C#中会发现的一件事是它对类型和类型转换更加严格,迫使您考虑数据如何从一种格式转换为另一种格式。
答案 2 :(得分:0)
C#中的byte
和string
之间没有隐式或自动转换。您最好的选择是通过string
获得string.Format
:
string.Format("{0}", yourByte)
正如@Mr Lister所指出的那样,string.Format
将返回一个字符串数值的字符串。如果您需要将其解释为ASCII字符,则只需将其转换为char
:
(char)yourByte