将字符串转换为十六进制字符串的C#惯用方法是什么?

将字符串转换为十六进制字符串的C#惯用方法是什么?,c#,vb.net,C#,Vb.net,我有一个字符串,但我希望有一个十六进制字符串,其中十六进制字符通过将原始字符转换为整数,然后将这些整数转换为十六进制字符来转换。我该怎么做 以下是我在VB中的实现方式: for i = 1 to len(str) hex_str = hex_str + lcase(cstr(hex(asc(mid(str, i, 1))))) next 现在,在C#中最惯用的方法是什么?我不是VB.NET开发人员,但有一个转换器,我有以下几点: for (i = 1; (i <= str.L

我有一个字符串,但我希望有一个十六进制字符串,其中十六进制字符通过将原始字符转换为整数,然后将这些整数转换为十六进制字符来转换。我该怎么做

以下是我在VB中的实现方式:

for i = 1 to len(str)
    hex_str = hex_str + lcase(cstr(hex(asc(mid(str, i, 1))))) 
next 

现在,在C#中最惯用的方法是什么?

我不是VB.NET开发人员,但有一个转换器,我有以下几点:

for (i = 1; (i <= str.Length); i++) {
     hex_str = (hex_str + hex(asc(str.Substring((i - 1), 1))).ToString().ToLower());
}
for(i=1;(i试试这个:

 for (var i = 1; i <= str.Length; i++)
    {
        hex_str = hex_str + Convert.ToString(Convert.ToString(Convert.ToInt32(str[i - 1]), 16).ToUpper()).ToLower();
    }
对于C中的(var i=1;i),我能想到的最简单的方法是:

var hexStr = str.ToCharArray()
                .Aggregate("", (current, c)
                               => current + Convert.ToInt32(c).ToString("X"));
第一行将字符串转换为
char[]
类型的字符数组,第二行和第三行将每个字符转换为整数
Int32
,然后转换为
string
类型的十六进制字符。该十六进制字符通过

以下是上述表达式中使用的函数:

  • ;来自System.LINQ,因此您可能需要使用System.LINQ;

  • ,传递
    “X”
    将使结果为十六进制而不是十进制

  • 对于聚合,我使用了(
    parameters=>returnvalue
    )。这是一个函数,它接受
    current
    c
    ,并返回current+Convert.ToInt32(c).ToString(“X”);


    如果有什么不清楚的地方,请在下面的评论中提问。

    请使用类似于“尝试使用此转换器”的方法@Jonathanalen,不,这不是一个无用的问题。当问一些问题时,OP通常应该提供一些解决问题的尝试。如果他不这样做,他不应该在这里提问。他可能正在寻找hir我是一名C#开发者,为他做这项工作。所以不是一家外包公司。所以我向OP重复我的问题:你尝试过什么:@Jonathanalen:我不同意。堆栈溢出不是一种将小型开发任务外包出去的方法。OP通常会在任务上投入一些精力,并指出它不起作用的地方。在这种情况下这就像试图将其转换为C一样简单(假设OP知道一些C是合理的,否则他为什么要转换任何东西?)并向我们展示他不理解或需要帮助的任何编译器/逻辑错误。简单地要求我们为他进行转换有点冒昧。@JonathanAllen:如果这是他的问题,那么应该这样表述。“这些函数做什么,C的等价物是什么?”或“C的惯用方式是什么?”[insert task here],这段VB代码是做什么的?“现在的情况是,“为我将其转换为C#”这是一个糟糕的问题。他应该说明是什么代码给了他一个绊脚石。从现在的问题来看,我只能假设绊脚石是他不知道C#语法,也不想知道。我不知道你用了什么转换器,但什么是
    hex
    asc
    ?这不会编译。@TomWijsman它们是VB中的内置函数。这是因为十六进制和ASC是内置函数,在C#中没有模拟-转换器可能只是将这些函数内联。它实际上是获取一个字符串,得到整数ascii码,然后根据它的外观返回该整数的十六进制码。@Jonathanalen:但不是在C#中。我认为不是这里的转换稍微太多了。:D