2012-03-21 55 views

回答

3
Regex.Replace(myString, ".{2}", "\\x$0"); 

如果你想去非正则表达式的路线,那么下面可能的工作:

string s = "6b5737e5728786794fff5e009d74d70"; 
var sb = new StringBuilder($s.Length * 2); 

for (int i = 0; i < s.Length; i+=2) 
    sb.Append("\\x").Append(s.Substring(i, [Math]::Min(2, s.Length - i))); 

string myNewString = sb.ToString(); 

如果你希望你的字符串包含(对于您的示例)的代码点U + 006B, U + 0057,U + 0037,& c。那么请再想一想。 字符串不是字节容器,它们是文本容器。你想在这种情况下,一个byte[]

byte[] byteArray = new byte[(s.Length + 1)/2] 
for (int i = 0; i < s.Length; i+=2) 
    byteArray[i/2] = Convert.ToByte(s.Substring(i, [Math]::Min(2, s.Length - i))); 
+0

我的字符串是一个普通的UTF8字符串(改性GUID)(例如6b5737e5728786794fff5e009d74d706),我需要从它一个十六进制字符串指定的格式。 – kazarindn 2012-03-21 08:17:28

+0

我不知道你的意思是UTF8字符串。在.NET中,不存在所有字符串都使用UTF-16的情况。如果你不告诉我什么是错误的或者我的解决方案存在问题(我认为它适用于你的情况),并且重申你的问题已经陈述了并不真正有帮助。 – Joey 2012-03-21 08:19:40

+0

“6b5737e5728786794fff5e009d74d70”是一个带有UTF8编码(用于Windows Phone的Encoding.UTF8)的字符串。我需要将它转换为“\ x ..”格式的十六进制刺。 – kazarindn 2012-03-21 08:23:39

相关问题