当前位置: 代码迷 >> C# >> 十六进制串,如何传化成字符>>带汉字
  详细解决方案

十六进制串,如何传化成字符>>带汉字

热度:70   发布时间:2016-05-05 03:51:06.0
十六进制串,怎么传化成字符>>带汉字
以下代码,如果在C#下面完成?


这里是VB.NET代码.


        Dim sStr As String

        sStr = "E065344E8A5E0F61494E9798927C220020004C004E003D002200E065344E8A5E0F61494E9798927C22002000410046003D0022003000220020004E0052003D002200390039003900390039003900390039002000"

        Dim sl_data As String
        Dim sr_data As String
        Dim sResult As String
        sResult = ""
        Dim i As Integer
        For i = 0 To sStr.Length / 4 - 1 Step 4

            sl_data = sStr.Substring(i + 2, 2)
            sr_data = sStr.Substring(i, 2)
           
            sResult = sResult + ChrW("&H" + sl_data + sr_data)

        Next
        Debug.Print(sResult)



输出结算如下:
无临床意义颗粒" LN


以下是VB6代码,


Dim sStr As String
sStr = "E065344E8A5E0F61494E9798927C220020004C004E003D002200E065344E8A5E0F61494E9798927C22002000410046003D0022003000220020004E0052003D002200390039003900390039003900390039002000"

debug.print HexToStr(sStr)

Public Function HexToStr(sHex As String) As String
    Dim sl_d As String
    Dim sr_d As String
    Dim i As Integer
    
    Dim sReturn As String
    Dim sStr As String
    sStr = sHex
    For i = 0 To Len(sStr) / 2 - 1
        sl_d = Mid(sStr, i + 2 + 1, 2)
        rl_d = Mid(sStr, i + 1, 2)
        i = i + 3
        Debug.Print sl_d & rl_d; "=" + ChrW("&H" & sl_d & rl_d)
        
        sReturn = sReturn & ChrW("&H" & sl_d & rl_d)
        
    Next
    HexToStr = sReturn
End Function



用以上VB代码,可以得到这种结果:
65E0=无
4E34=临
5E8A=床
610F=意
4E49=义
9897=颗
7C92=粒
0022="
0020= 
004C=L
004E=N
003D==
0022="
65E0=无
4E34=临
5E8A=床
610F=意
4E49=义
9897=颗
7C92=粒
0022="
无临床意义颗粒" LN="无临床意义颗粒"
------解决思路----------------------
看着像GB2312
byte[] byteArray = new byte[] { (byte)rdUpperValue, (byte)rdLowValue };  
Encoding gb = Encoding.GetEncoding("gb2312");  
gb.GetString(byteArray)

------解决思路----------------------
void Main()
{
string sStr = "E065344E8A5E0F61494E9798927C220020004C004E003D002200E065344E8A5E0F61494E9798927C22002000410046003D0022003000220020004E0052003D002200390039003900390039003900390039002000";
byte[] bytes = ConvertHexStringToByteArray(sStr);
string result = System.Text.Encoding.Unicode.GetString(bytes);
Console.WriteLine(result);
}

public static byte[] ConvertHexStringToByteArray(string hexString)
{
    if (hexString.Length % 2 != 0)
    {
        throw new ArgumentException(String.Format(System.Globalization.CultureInfo.InvariantCulture, "The binary key cannot have an odd number of digits: {0}", hexString));
    }

    byte[] hexAsBytes = new byte[hexString.Length / 2];
    for (int index = 0; index < hexAsBytes.Length; index++)
    {
        string byteValue = hexString.Substring(index * 2, 2);
        hexAsBytes[index] = byte.Parse(byteValue, System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture);
    }

    return hexAsBytes; 
}


无临床意义颗粒" LN="无临床意义颗粒" AF="0" NR="99999999 
------解决思路----------------------

            var str = "e065344e8a5e0f61494e9798927c220020004c004e00";
            byte[] byteArray = new byte[str.Length / 2];
            for (int i = 0, k = 0; i < str.Length; i += 2, k++)
            {
                byteArray[k] = (byte)Convert.ToInt16(str.Substring(i, 2), 16);
            }
            Encoding gb = Encoding.GetEncoding("utf-16");  
            Console.WriteLine(gb.GetString(byteArray));
无临床意义颗粒" LN
  相关解决方案