关于C#转码问题,如果字符串里面含有中文、英文、数字,那请问怎样转为对应的16进制数据?

如题所述

字符编码

        å­—符编码是将字符(中文、英文、数字等)映射到二进制(或言byte[],或言16进制,都是不同的表现形式而已)。

        è¿™ä¸ªæ˜ å°„是人为定义的,也是不唯一的,每一套映射都被称为是一个字符编码。字符的传输,都是要编码-传输-解码的过程,而常见的乱码问题,实际上就是编码和解码所使用的字符编码不相同所引发的。

        常见的GB2312、UTF8等,都是不相同的字符编码。

回答问题

        将字符串转换到16进制,只要先制定一个字符编码转化为byte[]。下面实例使用UTF8转换:

byte[] data = System.Text.Encoding.UTF8.GetBytes("中文English0123456789");

        ç„¶åŽå°†byte[]转换为十六进制表示即可。.NET只提供了byte到16进制的方法,所以在这里新写了一个byte[]到16进制的方法:

string Hex(byte[] data)
{
    string hex = "";
    foreach (byte b in data)
    {
        hex += Convert.ToString(b, 16);
    }
    return hex;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-09-12

参考:

using System;
using System.Text;

public string ConvertStringToHex(string input, Encoding encoding = null)
{
if (encoding == null)
encoding = Encoding.UTF8;

byte[] b = encoding.GetBytes(input); 
string output = string.Empty;
for (int i = 0; i < b.Length; i++)
{
output += "%" + Convert.ToString(b[i], 16);
}
return output;
}

public string ConvertHexToString(string input, Encoding encoding = null)
{
if (encoding == null)
encoding = Encoding.UTF8;

string[] chars = hs.Split(new char[]{'%'}, StringSplitOptions.RemoveEmptyEntries);
byte[] bytes = new byte[chars.Length];
for (int i = 0; i < chars.Length; i++)
{
bytes[i] = Convert.ToByte(chars[i], 16);
}
string output = encoding.GetString(bytes);
return output;
}

第2个回答  2016-09-12
System.Text.Encoding.UTF8.GetString()
相似回答