将十六进制字符串转换回字符串

时间:2013-11-18 22:40:48

标签: c# string encoding

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

该字符的十六进制值为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,但如何将此十六进制值字符串转换回字符串?任何帮助都会很棒!

2 个答案:

答案 0 :(得分:2)

如果你实际试图用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。)

答案 1 :(得分:0)

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

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