Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将十六进制字符串转换回字符串_C#_String_Encoding - Fatal编程技术网

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:这是一个很好的观点,我理解它在字符串中的用法,但字符文字只能包含一个字符,因此,编译器不能将代码误解为其他内容。在这种情况下,您将得到一个编译错误。