需要将ASCII值转换为十六进制值。

3
我需要将ASCII转换为十六进制值。请参考ASCII表格,但下面列出了一些示例:
  • ascii 1 = 31
  • 2 = 32
  • 3 = 33
  • 4 = 34
  • 5 = 35
  • A = 41
  • a = 61 等等
但我使用的是int而不是字符串值。是否有可能做到这一点。 因此,int test = 12345; 需要将其转换为i = 3132333435。

我需要将ASCII转换为十六进制,但ASCII值是int类型而不是字符串或字符。这是为了一个需要十六进制数据的硬件设备所需的。 - SA.
4个回答

7

测试一下

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);

0

将字符转换为ASCII码

int c = (int)'a';

0

类似于Anthony Pegram的解决方案,但更加LINQ风格且稍微短一些,但由于在aggregate方法中存在多个字符串分配,因此速度较慢。

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

0

尝试使用这个方法

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接