public string smsPDUEncoded(string srvContent)
{
Encoding encodingUTF = System.Text.Encoding.BigEndianUnicode;
string s = null;
byte [] encodedBytes = encodingUTF.GetBytes(srvContent);
for (int i =0;i < encodedBytes.Length;i++)
{
s += BitConverter.ToString(encodedBytes,i,1);
}

return s+"\r\n"+smsPDUDecoded(encodingUTF,encodedBytes);
// s = String.Format("{0:X2}{1}",s.Length / 2,s);
// return s+"\r\n"+smsPDUDecoded(encodingUTF,encodedBytes);
}
public static Byte[] ToHexByte(byte[] bytes) 
{
Byte[] bt=new byte[bytes.Length/4];
for (int i = 0; i < bytes.Length; i+=4) 
{
//组合两个字符为一个字节
bt[i/4]=(byte)((bytes[i+1]<<4)+bytes[i+3]);
//chars[i * 2] = hexDigits[bytes[i] >> 4];//移位
//chars[i * 2 + 1] = hexDigits[bytes[i] & 0xF];//按位 与
}
return bt;
}
public string smsPDUDecoded(string sss)
{
Encoding encodingUTF = System.Text.Encoding.BigEndianUnicode;

byte [] encodedBytes=encodingUTF.GetBytes(sss);
encodedBytes=ToHexByte(encodedBytes);
//encodedBytes=ToHexByte(encodedBytes);
Decoder decoderUTF=encodingUTF.GetDecoder();
char[] s=new char[encodedBytes.Length];
decoderUTF.GetChars(encodedBytes,0,encodedBytes.Length,s,0);
string ss=null;
for  (int i=0;i<s.Length;i++)
{
ss+=Convert.ToString(s[i]);
}
ss=encodingUTF.GetString(encodedBytes);
return ss;
}
public string smsPDUDecoded(Encoding encodingUTF,byte[] enc)
{
Decoder decoderUTF=encodingUTF.GetDecoder();

char[] s=new char[enc.Length];
decoderUTF.GetChars(enc,0,enc.Length,s,0);
string ss=null;
for  (int i=0;i<s.Length;i++)
{
ss+=Convert.ToString(s[i]);
}
return ss;
}
//!!!!!!!!!!!!!
//smsPDUDecoded(s)为何出来的乱码,具体解码的时候该怎样转换呢。

解决方案 »

  1.   

    楼上的看看,我们交流一下。下面的是我写的,解码是出来了,可是有时候要在编码前加上00或者去掉00。
    public static Byte[] ToHexByte(byte[] bytes) 
    {
    Byte[] bt=new byte[bytes.Length/4];
    for (int i = 0; i < bytes.Length-3; i+=4) 
    {
    //判断第一个字节
    if ( (bytes[i+1]-0x30)>=0x00
    &&
    (bytes[i+1]-0x30)<=0x09 )
    bytes[i+1]=(byte)(bytes[i+1]-0x30);
    if ( (bytes[i+1]-0x37)>=0x0A
    &&
    (bytes[i+1]-0x37)<=0x0F )
    bytes[i+1]=(byte)(bytes[i+1]-0x37);
    //判断第二个字节
    if ( (bytes[i+3]-0x30)>=0x00
    &&
    (bytes[i+3]-0x30)<=0x09 )
    bytes[i+3]=(byte)(bytes[i+3]-0x30);
    if ( (bytes[i+3]-0x37)>=0x0A
    &&
    (bytes[i+3]-0x37)<=0x0F )
    bytes[i+3]=(byte)(bytes[i+3]-0x37);
    //组合两个字符为一个字节
    bt[i/4]=(byte)((bytes[i+1]<<4)+bytes[i+3]);
    //chars[i * 2] = hexDigits[bytes[i] >> 4];//移位
    //chars[i * 2 + 1] = hexDigits[bytes[i] & 0xF];//按位 与
    }
    return bt;
    }