你如何将一个parapraph转换为十六进制表示法,然后再将其转换回原始的字符串形式?
(C#)
旁注:将字符串放入十六进制格式会缩小它进入硬核缩小算法的最大值?
"hex符号"究竟是什么意思?这通常是指编码二进制数据,而不是文本.您需要以某种方式对文本进行编码(例如,使用UTF-8),然后通过将每个字节转换为一对字符将二进制数据编码为文本.
using System; using System.Text; public class Hex { static void Main() { string original = "The quick brown fox jumps over the lazy dog."; byte[] binary = Encoding.UTF8.GetBytes(original); string hex = BytesToHex(binary); Console.WriteLine("Hex: {0}", hex); byte[] backToBinary = HexToBytes(hex); string restored = Encoding.UTF8.GetString(backToBinary); Console.WriteLine("Restored: {0}", restored); } private static readonly char[] HexChars = "0123456789ABCDEF".ToCharArray(); public static string BytesToHex(byte[] data) { StringBuilder builder = new StringBuilder(data.Length*2); foreach(byte b in data) { builder.Append(HexChars[b >> 4]); builder.Append(HexChars[b & 0xf]); } return builder.ToString(); } public static byte[] HexToBytes(string text) { if ((text.Length & 1) != 0) { throw new ArgumentException("Invalid hex: odd length"); } byte[] ret = new byte[text.Length/2]; for (int i=0; i < text.Length; i += 2) { ret[i/2] = (byte)(ParseNybble(text[i]) << 4 | ParseNybble(text[i+1])); } return ret; } private static int ParseNybble(char c) { if (c >= '0' && c <= '9') { return c-'0'; } if (c >= 'A' && c <= 'F') { return c-'A'+10; } if (c >= 'a' && c <= 'f') { return c-'A'+10; } throw new ArgumentOutOfRangeException("Invalid hex digit: " + c); } }
不,这样做根本不会缩小它.恰恰相反 - 你最终会得到更多的文字!但是,您可以压缩二进制表单.在将任意二进制数据表示为文本方面,Base64比普通十六进制更有效.使用Convert.ToBase64String和Convert.FromBase64String进行转换.