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

问题描述:

我需要将ascii转换为十六进制值。参阅ASCII表但是我有下面列出的几个例子:需要将ascii值转换为十六进制值

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

但我我们ing int而不是字符串值。有没有可能做到这一点。 因此int test = 12345; 需要得到转换I = 3132333435

+0

你为什么要这么做? – 2010-04-25 05:09:08

+0

我需要将ascii转换为十六进制,但acii值是int而不是字符串或char。这对于需要十六进制数据的硬件设备是必需的 – 2010-04-25 05:18:19

测试此

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(在C#的string型使用的编码)的前128个码点具有相同的数值作为ASCII,因此C#char值投射到int是好的。然而,通常被描述为“ASCII”的实际上是一些ANSI代码页(在美国,通常代码页1252,“西欧(Windows)”,其具有256个代码点,第二个128不具有与用于UTF16

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

string input = "12345"; 
// Replace 1252 with whatever code page you're using, if not that one 
string hex = string.Join(string.Empty, 
    Encoding.GetEncoding(1252).GetBytes(input).Select(b => b.ToString("X")).ToArray()); 

Console.WriteLine(hex); 

将char转换为ASCII

int c = (int)'a'; 
+0

抱歉只是对问题本身进行了编辑 – 2010-04-25 05:15:09

+0

需要将ascii转换为十六进制 – 2010-04-25 05:16:10

+0

int hex = digit + 0x30; – 2010-04-25 06:10:42

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

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

感谢您的出色解决方案。 – 2010-04-25 05:42:32