C# 将十六进制字符串转换回字符串
我有一个字符串,它有一个我想替换的字符 该字符的十六进制值为C# 将十六进制字符串转换回字符串,c#,string,encoding,C#,String,Encoding,我有一个字符串,它有一个我想替换的字符 该字符的十六进制值为96,我想用2D的十六进制值替换该字符。我试图对字符串进行一次简单的替换,但没有成功,因为出于某种原因,它无法识别字符。每当我打印出来时,它只打印一个空白值: byte testByte = byte.Parse("96", System.Globalization.NumberStyles.HexNumber); char testChar = Convert.ToChar(testByte); // when I print th
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,但是如何将这个十六进制值字符串转换回字符串呢?任何帮助都会很好 如果您实际上试图用U+002D替换U+0096,您可以使用:
text = text.Replace("\u0096", "\u002d");
请注意,U+0096是“防护区的起点”。如果您实际上是指“在Windows 1252中编码为96的值”,那么您可能需要:
text = text.Replace("\u2020", "\u002d");
(基于,显示0x96到U+2020的映射。)只需将一个字符替换为另一个字符即可。您可以使用转义码使用十六进制字符代码来指定字符:
s = s.Replace('\x96', '\x2d');
“角色的十六进制值为96”是什么意思?你的意思是U+0096?真的吗?这听起来很奇怪-这根弦是从哪里来的?如果您能提供更多的上下文,这将非常有帮助。我个人建议使用
\u
而不是\x
——后者是可变长度的,这一点很脆弱。@JonSkeet:这是一个很好的观点,我理解它在字符串中的用法,但字符文字只能包含一个字符,因此,编译器不能将代码误解为其他内容。在这种情况下,您将得到一个编译错误。