【问题标题】:Need to convert ascii value to hex value需要将 ascii 值转换为 hex 值
【发布时间】:2011-02-12 00:40:20
【问题描述】:

我需要将 ascii 转换为十六进制值。请参阅 Ascii 表,但我在下面列出了一些示例:

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

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

【问题讨论】:

  • 我需要将 ascii 转换为十六进制,但 acii 值是 int 而不是字符串或字符。这是需要十六进制数据的硬件设备所必需的

标签: c# ascii hex


【解决方案1】:

测试一下

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# char 值转换为 @ 987654325@ 很好。然而,通常被描述为“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);

【讨论】:

    【解决方案2】:

    将字符转换为 ASCII

    int c = (int)'a';
    

    【讨论】:

      【解决方案3】:

      类似于 Anthony Pegram 的解决方案,但更多 LINQ'ish 和更短一点,但由于聚合方法中的多个字符串分配更慢。

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

      【讨论】:

        【解决方案4】:

        试试这个方法

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-11
          • 2019-09-13
          • 2015-10-30
          • 1970-01-01
          • 2015-08-12
          • 1970-01-01
          • 1970-01-01
          • 2013-02-28
          相关资源
          最近更新 更多