【问题标题】:Hex string to plain text十六进制字符串到纯文本
【发布时间】:2014-02-04 06:41:30
【问题描述】:

我有十六进制表示 ascii 值,以以下格式存储。

// Hex reperesention of ascii string
string hexString = "48-65-6C-6C-6F-20-77-6F-72-6C-64-21-21-21";

// Could someone help fill in the blanks here? 
private string hexConverter(string hexString)
{
    string asciiCharString;

    // Convert it

    return asciiCharString;
}

所以当被调用时;

string s = hexConverter(hexString);

字符串 s 将包含“Hello world!!!”在这种情况下。

【问题讨论】:

  • 您显示的代码不是解决此问题的尝试。您可以编辑您的帖子以反映您迄今为止的尝试吗?
  • C# hex to ascii 的可能重复项
  • 拆分-,通过十六进制字符串到字节转换器传递字符串,通过Encoding.ASCII.GetString()传递该字节数组,你就完成了
  • 自己试试吧。提示:string.SplitConvert.ToByte(string value, int fromBase)Encoding.ASCII.GetString
  • @Blam 不,这里重要的是数据的编码方式。对于给定的示例,可能是 ASCII、UTF8 等。

标签: c# string hex ascii


【解决方案1】:

让我们分解这个问题......

因此,您首先要根据连字符 ('-') 来拆分字符串。为此,我们将使用Split('-')。这会产生一个字符串数组。

hexString.Split('-')

然后我们希望将这些字符串转换为数字。因为这是 ASCII,让我们将每个字符串转换为 byte

byte.Parse(value, System.Globalization.NumberStyles.HexNumber)

一旦我们有了一堆bytes,我们就可以使用ASCII编码器(Encoding.ASCII.GetString())将它转换成String

所以把它们放在一起:

static string hexConverter(string hexString)
{
  return Encoding.ASCII.GetString(fetchBytes(hexString).ToArray());
}

static IEnumerable<byte> fetchBytes(String hexString)
{
  foreach (var value in hexString.Split('-'))
    yield return byte.Parse(value, System.Globalization.NumberStyles.HexNumber);
}

编码

如果以后您决定需要 UTF-8 或其他东西,那么您只需将 Encoding.ASCII 替换为 Encoding.UTF8,其余的逻辑将还在工作。

【讨论】:

    【解决方案2】:
    private string hexConverter(string hexString)
    {
        string asciiCharString ="" ;
    
        var splitResult = hexString.Split('-');
    
        foreach (string hexChar in splitResult )
        {
            var byteChar = int.Parse(hexChar, NumberStyles.HexNumber);
            asciiCharString += (char)byteChar;
        }
    
        return asciiCharString;
    }
    
    // Test
    private void button1_Click(object sender, EventArgs e)
    {
        string hexString = "48-65-6C-6C-6F-20-77-6F-72-6C-64-21-21-21";
        string asciiString = hexConverter(hexString);
    
        MessageBox.Show(asciiString);
    }
    

    【讨论】:

      【解决方案3】:
      var convertedString = new StringBuilder();
      
      foreach(var hex in hexString.Split('-'))
      {
          var unicode = int.Parse(hex, NumberStyles.HexNumber);
          convertedString.Append((char)unicode);
      }
      
      return convertedString.ToString();
      

      【讨论】:

      • 这可能是也可能不是使用的编码......当然,如果你只使用 ASCII 文本,你可能不需要关心。
      猜你喜欢
      • 2010-10-04
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      • 2023-04-08
      相关资源
      最近更新 更多