【问题标题】:How to convert a regular string to an ASCII hexadecimal string in C#?如何在 C# 中将常规字符串转换为 ASCII 十六进制字符串?
【发布时间】:2012-04-18 05:18:42
【问题描述】:

我最近在做一个项目,我需要将常规的数字字符串转换为 ASCIII 十六进制并将十六进制存储在字符串中。

所以我有类似的东西

string random_string = "4000124273218347581"

我想把它转换成十六进制字符串

string hex_string = "34303030313234323733323138333437353831"

这似乎是一个奇怪的具体任务,但这是我遇到的一个,当我试图找出如何执行它时,我在网上找不到任何答案。

无论如何,我想通了,并创建了一个类来使我的代码更整洁。

如果其他人需要将常规字符串转换为十六进制字符串,我将在稍后发布包含我的解决方案的答案。

(我对 stackoverflow 还很陌生,所以我希望这样做没问题)

==========================================

事实证明,由于声誉不够高,我无法在提问的前 8 小时内自己回答问题。

所以我在这里坚持我的答案:

好的,这是我的解决方案:

我在命名空间中创建了一个名为StringToHex 的类

public class StringToHex
{
    private string localstring;
    private char[] char_array;
    private StringBuilder outputstring = new StringBuilder();
    private int value;

    public StringToHex(string text)
    {
        localstring = text;
    }

    public string ToAscii()
    {
        /* Convert text into an array of characters */
        char_array = localstring.ToCharArray();
        foreach (char letter in char_array)
        {
            /* Get the integral value of the character */
            value = Convert.ToInt32(letter);

            /* Convert the decimal value to a hexadecimal value in string form */
            string hex = String.Format("{0:X}", value);

            /* Append hexadecimal version of the char to the string outputstring*/
            outputstring.Append(Convert.ToString(hex));
        }
    return outputstring.ToString();
    }
}

要使用它,您需要执行以下操作:

/* Convert string to hexadecimal */
StringToHex an_instance_of_stringtohex = new StringToHex(string_to_convert);
string converted_string = an_instance_of_stringtohex.ToAscii();

如果工作正常,转换后的字符串应该是原始字符串长度的两倍(由于十六进制使用两个字节来表示每个字符)。

现在,正如有人已经指出的那样,您可以在这里找到一篇类似的文章:

http://www.c-sharpcorner.com/UploadFile/Joshy_geo/HexConverter10282006021521AM/HexConverter.aspx

但我发现它对我的具体任务没有多大帮助,我想我的解决方案更优雅;)

【问题讨论】:

  • “十六进制字符串”与原文有何关系?什么规则?
  • 在每个字符前面放一个3 :)
  • @HenkHolterman - 是的,我确实想通了,但我希望 OP 更多地考虑问题是如何构建的。
  • 发布问题并自己回答是可以的,但 a) 彻底检查是否有欺骗行为 b) 将其设为(精确)问题。
  • @L.B - 如果所有字符确实是数字并且所需的十六进制编码是 ASCII,那会很好用 :)

标签: c# .net string hex


【解决方案1】:

好的,这是我的解决方案:

我在命名空间中创建了一个名为StringToHex 的类

public class StringToHex
{
    private string localstring;
    private char[] char_array;
    private StringBuilder outputstring = new StringBuilder();
    private int value;

    public StringToHex(string text)
    {
        localstring = text;
    }

    public string ToAscii()
    {
        /* Convert text into an array of characters */
        char_array = localstring.ToCharArray();
        foreach (char letter in char_array)
        {
            /* Get the integral value of the character */
            value = Convert.ToInt32(letter);

            /* Convert the decimal value to a hexadecimal value in string form */
            string hex = String.Format("{0:X}", value);

            /* Append hexadecimal version of the char to the string outputstring*/
            outputstring.Append(Convert.ToString(hex));
        }
    return outputstring.ToString();
    }
}

要使用它,您需要执行以下操作:

/* Convert string to hexadecimal */
StringToHex an_instance_of_stringtohex = new StringToHex(string_to_convert);
string converted_string = an_instance_of_stringtohex.ToAscii();

如果工作正常,转换后的字符串应该是原始字符串长度的两倍(由于十六进制使用两个字节来表示每个字符)。

现在,正如有人已经指出的那样,您可以在这里找到一篇类似的文章:

http://www.c-sharpcorner.com/UploadFile/Joshy_geo/HexConverter10282006021521AM/HexConverter.aspx

但我发现它对我的具体任务没有多大帮助,我想我的解决方案更优雅;)

【讨论】:

    【解决方案2】:

    只要字符串中的字符代码不大于 255 (0xFF) 即可:

    string hex_string =
      String.Concat(random_string.Select(c => ((int)c).ToString("x2")));
    

    注意:这也适用于 16 (0x10) 以下的字符代码,例如它将从换行符"\r\n" 生成十六进制代码"0D0A",而不是"DA"

    【讨论】:

      【解决方案3】:

      您需要阅读以下文章 -

      http://www.c-sharpcorner.com/UploadFile/Joshy_geo/HexConverter10282006021521AM/HexConverter.aspx

      将数据转换为十六进制格式的主函数

      public string Data_Hex_Asc(ref string Data)
      {
          string Data1 = "";
          string sData = "";
          while (Data.Length > 0)
          //first take two hex value using substring.
          //then convert Hex value into ascii.
          //then convert ascii value into character.
          {
              Data1 = System.Convert.ToChar(System.Convert.ToUInt32(Data.Substring(0, 2),  16)).ToString();
              sData = sData + Data1;
               Data = Data.Substring(2, Data.Length - 2);
          }
          return sData;
      }
      

      看看这是不是你要找的。​​p>

      【讨论】:

      • 请在您的回答中包含来自该资源的关键信息。
      • 是的,我确实读过那篇文章,但老实说,我发现它并不容易理解 - 这促使我发布这个问题/答案以提供替代解决方案 :)
      • 这个方法不是把字符转成十六进制,而是把十六进制转成字符。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 2014-11-16
      • 2018-01-31
      • 2022-07-22
      • 2013-02-07
      • 2016-07-26
      相关资源
      最近更新 更多