无法从字节转换为字符串(VB.Net到C#)

时间:2014-06-18 10:32:26

标签: c# vb.net

我有一个用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 []。

任何帮助都可以。我真的坚持这个。

3 个答案:

答案 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#中的bytestring之间没有隐式或自动转换。您最好的选择是通过string获得string.Format

string.Format("{0}", yourByte)

正如@Mr Lister所指出的那样,string.Format将返回一个字符串数值的字符串。如果您需要将其解释为ASCII字符,则只需将其转换为char

(char)yourByte