需要将ascii值转换为十六进制值

时间:2010-04-25 05:05:47

标签: c# ascii hex

我需要将ascii转换为十六进制值。请参阅Ascii表,但我列出了几个例子:

  • ascii 1 = 31
  • 2 = 32
  • 3 = 33
  • 4 = 34
  • 5 = 35
  • A = 41
  • a = 61等

但我使用的是int而不是字符串值。有可能做到这一点。 因此int test = 12345; 需要获得转换后的i = 3132333435

4 个答案:

答案 0 :(得分:6)

测试此

string input = "12345";
string hex = string.Join(string.Empty,
    input.Select(c => ((int)c).ToString("X")).ToArray());

Console.WriteLine(hex);

注意:在C#4中,不需要调用.ToArray(),因为string.Join方法已被重载以接受IEnumerable<T>

以上将适用于真正的ASCII,因为UTF16的前128个代码点(C#的string类型中使用的编码)具有与ASCII相同的数值,因此转换C#{{1} char的值很好。然而,通常所谓的“ASCII”实际上是一些ANSI代码页(在美国,通常是代码页1252,“西欧(Windows)”,它有256个代码点,第二个128没有相同的值)用于UTF16。

如果您正在处理该问题或该问题的任何其他代码页,并且您将文本作为C#int,则可以应用与上述相同的技术,但使用string除外在转换为十六进制之前将C#Encoding对象转换为string的类:

byte[]

答案 1 :(得分:0)

将字符转换为ASCII

int c = (int)'a';

答案 2 :(得分:0)

Similair对Anthony Pegram的解决方案,但更多LINQ'ish和更短,但在聚合方法中多个字符串分配的速度较慢。

string hex = input.Select(c => ((int)c).ToString("X")).Aggregate((a, s) => a + s);

答案 3 :(得分:0)

尝试使用此方法

public static string AsciiToHexadecimal(List<int> asciiList)
{
        return asciiList.Aggregate("", (current, i) => current + $"{i:X}");
}

这是一种方法,可以帮助您将ASCII数字数组转换为十六进制。