当前位置:  开发笔记 > 编程语言 > 正文

将段落转换为十六进制常量,然后返回到字符串

如何解决《将段落转换为十六进制常量,然后返回到字符串》经验,为你挑选了1个好方法。

你如何将一个parapraph转换为十六进制表示法,然后再将其转换回原始的字符串形式?

(C#)

旁注:将字符串放入十六进制格式会缩小它进入硬核缩小算法的最大值?



1> Jon Skeet..:

"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进行转换.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有