【问题标题】:Convert hex string back to string将十六进制字符串转换回字符串
【发布时间】:2013-11-18 22:40:48
【问题描述】:

我有一个字符串,其中有一个我想替换的字符。

该字符的十六进制值为96,我想将该字符替换为十六进制值2D。我试图对字符串进行简单的替换,但它不起作用,因为由于某种原因它无法识别字符。每当我打印出来时,它只会打印一个空白值:

byte testByte = byte.Parse("96", System.Globalization.NumberStyles.HexNumber);
char testChar = Convert.ToChar(testByte);  // when I print this its just a blank char

所以,我继续将整个字符串转换为十六进制,但不确定如何将十六进制值字符串转换回字符串。这是我所拥有的:

// using windows 1252 encoding
System.Text.Encoding windows1252Encoding = System.Text.Encoding.GetEncoding(1252);
byte[] myByte = windows1252Encoding.GetBytes(myString);
var myHexString = BitConverter.ToString(myByte);

myHexString = myHexString .Replace("96", "2D");

所以此时我已将十六进制值 96 替换为 2D,但是如何将这个十六进制值字符串转换回字符串?任何帮助都会很棒!

【问题讨论】:

  • “字符的十六进制值为 96”是什么意思?你的意思是它是 U+0096?
  • 真的吗?这对我来说听起来很奇怪——这个字符串是从哪里来的?如果您能提供更多背景信息,那将非常有帮助。

标签: c# string encoding


【解决方案1】:

如果您实际上试图用 U+002D 替换 U+0096,您可以使用:

text = text.Replace("\u0096", "\u002d");

请注意,U+0096 是“保护区域的开始”。如果您实际上是指“在 Windows 1252 中编码为 96 的值”,那么您可能想要:

text = text.Replace("\u2020", "\u002d");

(基于Wikipedia cp 1252 page,显示0x96映射到U+2020。)

【讨论】:

    【解决方案2】:

    只需将一个字符替换为另一个。您可以使用\x 转义码来使用十六进制的字符代码来指定字符:

    s = s.Replace('\x96', '\x2d');
    

    【讨论】:

    • 我个人建议使用 \u 而不是 \x - 后者是可变长度的事实是脆弱的。
    • @JonSkeet:这是一个很好的观点,我会理解它在字符串中使用,但字符文字只能包含一个字符,因此编译器不会将代码误解为别的东西。在这种情况下,你会得到一个编译错误。
    猜你喜欢
    • 2012-01-14
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 2012-11-06
    • 2020-11-07
    相关资源
    最近更新 更多